Coq에서 Ackermann-Peters 함수를 정의하려고하는데 이해가 안되는 오류 메시지가 나타납니다. 보시다시피, 저는 Ackermann의 인수 a, b
을 한 켤레에 포장합니다. ab
; 인수에 대한 순서 지정 함수를 정의하는 순서를 제공합니다. 그런 다음 Function
양식을 사용하여 Ackermann 자체를 정의하고 ab
인수에 대한 정렬 함수를 제공합니다.Coq에서 Ackermann을 정의하는 중 오류가 발생했습니다.
Error: No such section variable or assumption:
ack
.
내가 COQ 귀찮게하지만, 인터넷 검색, 내가 제안 재귀를 사용하여 문제가있을 수 있습니다 찾았는지 확실하지 않다 :
Require Import Recdef.
Definition ack_ordering (ab1 ab2 : nat * nat) :=
match (ab1, ab2) with
|((a1, b1), (a2, b2)) =>
(a1 > a2) \/ ((a1 = a2) /\ (b1 > b2))
end.
Function ack (ab : nat * nat) {wf ack_ordering} : nat :=
match ab with
| (0, b) => b + 1
| (a, 0) => ack (a-1, 1)
| (a, b) => ack (a-1, ack (a, b-1))
end.
내가 도착하면 다음과 같은 오류 메시지입니다 함수는 순서 부 또는 측정 값으로 정의되며 재귀 호출은 일치 항목 내에서 발생합니다. 그러나 투영 fst
및 snd
및 if-then-else
을 사용하면 다른 오류 메시지가 생성됩니다. 누군가가 Coq에서 Ackermann을 정의하는 방법을 제안 할 수 있습니까?
오늘 같은 문제가 발생했습니다. 해결책을 찾았습니까? –
@AbhishekAnand 잠시 지났습니다 ... 아래에 '프로그램 고정 점'이 포함 된 솔루션을 제공했습니다. 'Function'으로 해결책을 찾았습니까? –
아니, 나는하지 않았다. 귀하의 답변에 감사드립니다. –