相关疑难解决方法(0)

在Coq中定义Ackermann时出错

我试图在Coq中定义Ackermann-Peters函数,我收到一条我不明白的错误消息.正如你所看到的,我把a, bAckermann 的论据打包成一对ab; 我提供了一个定义参数的排序函数的排序.然后我使用Function表单来定义Ackermann本身,为它提供ab参数的排序函数.

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, …
Run Code Online (Sandbox Code Playgroud)

coq ackermann totality

9
推荐指数
1
解决办法
1336
查看次数

程序修复点和Coq中的函数有什么区别?

他们似乎服务于类似的目的.到目前为止我注意到的一个区别是,虽然Program Fixpoint会接受一个复合测量{measure (length l1 + length l2) },但Function似乎拒绝这个并且只会允许{measure length l1}.

是否Program FixpointFunction它们更强大,或者它们更适合不同的用例?

coq totality

7
推荐指数
1
解决办法
887
查看次数

使用Fix或Program Fixpoint在Coq中编写有根据的程序

下面的章节给出的例子GeneralRec Chlipala的书,我想写归并算法.

这是我的代码

Require Import Nat.

Fixpoint insert (x:nat) (l: list nat) : list nat :=
  match l with
  | nil => x::nil
  | y::l' => if leb x y then
              x::l
            else
              y::(insert x l')
  end.

Fixpoint merge (l1 l2 : list nat) : list nat :=
  match l1 with
  | nil => l2
  | x::l1' => insert x (merge l1' l2)
  end.

Fixpoint split (l : list nat) : list nat * list nat :=
  match l …
Run Code Online (Sandbox Code Playgroud)

coq

2
推荐指数
1
解决办法
432
查看次数

标签 统计

coq ×3

totality ×2

ackermann ×1