【发布时间】:2018-05-22 23:44:05
【问题描述】:
考虑这个例子:
Inductive T :=
| foo : T
| bar : nat -> T -> T.
Fixpoint evalT (t:T) {struct t} : nat :=
match t with
| foo => 1
| bar n x => evalBar x n
end
with evalBar (x:T) (n:nat) {struct n} : nat :=
match n with
| O => 0
| S n' => (evalT x) + (evalBar x n')
end.
Coq 以错误拒绝它:对 evalBar 的递归调用的主要参数等于“n”而不是“x”。
我知道终止检查器被两种不相关的归纳类型(T 和 nat)弄糊涂了。但是,看起来我试图定义的函数确实会终止。如何让 Coq 接受它?
【问题讨论】:
标签: recursion coq termination