我想在Coq中定義Ackermann-Peters函數,並且收到一條我不明白的錯誤消息。正如你所看到的,我將Ackermann的參數a, b
包裝成一對ab
;我提供了一個爲參數定義排序函數的順序。然後,我使用Function
表格來定義Ackermann本身,爲它提供ab
參數的排序功能。在Coq中定義Ackermann的錯誤
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.
我得到的是以下錯誤消息:
Error: No such section variable or assumption:
ack
.
我不知道是什麼困擾勒柯克,但搜索互聯網,我發現了一個建議,有可能是使用遞歸問題函數用排序或度量來定義,其中遞歸調用發生在匹配中。但是,使用投影fst
和snd
和if-then-else
生成了不同的錯誤消息。有人可以建議如何在Coq中定義Ackermann嗎?
今天我遇到了同樣的問題。你找到解決方案嗎? – 2013-06-27 06:33:35
@AbhishekAnand這已經有一段時間了......我在下面提供了一個帶有「程序修復點」的解決方案。你有沒有用'Function'找到解決方案? – 2017-06-30 10:40:37
不,我沒有。感謝您的回答。 – 2017-06-30 21:12:30