저는 현재 vellvm과 함께 작업하고 있습니다. 나는 코퀴인 초보자입니다. 이 경고는 서명을 계산 생성Coq nats에서 스택 오버 플로우 또는 세그먼트 화 오류를 방지하려면 어떻게합니까?
Warning: Stack overflow or segmentation fault happens when working with large numbers in nat (observed threshold may vary from 5000 to 70000 depending on your system limits and on the command executed).
내 기능 :
프로그래밍 동안, 나는 다음과 같은 경고에 직면했다. 서명은 상위 비트와 하위 비트로 나뉩니다. 상위 비트와 하위 비트를 나타내는 두 개의 n1과 n2가 주어지면 (n1 * 65536) + n2가 계산됩니다. 이것은 16 비트의 2 진수를 나란히 배치 한 추상화입니다.
매우 놀랍습니다. 왜냐하면 coq nat 정의가 S 생성자 덕택에 외부에서 큰 int를 처리하기 때문에 나타납니다.
coq에서이 경고/큰 숫자를 어떻게 사용해야합니까? 구현을 nat에서 일종의 이진 구조로 변경했습니다.
감사합니다.
nats는 "S"로 만들어 졌기 때문에 매우 까다 롭습니다. 즉, 모든 숫자가 문자 그대로 *'S '응용 프로그램의 순서가 될 것입니다. 정수 대신 정수로 작업 할 수도 있지만 비슷한 증명 원리가 있지만 부호/진폭 (비트) 기반 표현 : http://coq.inria.fr/library/Coq.ZArith.BinInt.html –
어떻게 조작 할 수 있습니까? (Zpos 1) + (Zpos 2)가 작동하지 않는 것 같습니다 ... - 오류 : "1 % Z"에 "|" "nat"유형이 있어야합니다. – fotanus
"+"는 현재 위치에 따라 여러 가지 의미가 있기 때문입니다. 실제로 "+"는 nats를 추가하기위한 문법적인 설탕이며, 여기서 "plus"는 두 개의 nat에 struturally 정의됩니다. 당신은'nat' (즉,'Int_scope')와는 다른 _interpretation scope_에있는 정수에'plus'를 사용하고 싶습니다. 해석 범위 및 해당 해석 방법을 열고 사용하는 방법을 읽어보십시오. –