所以,我有一个看起来像这样的证据:
induction t; intros; inversion H ; crush.
它解决了我的所有目标,但当我Qed
时,我收到以下错误:
Cannot guess decreasing argument of fix.
所以在生成的证明术语的某处,有一个非有根据的递归。问题是,我不知道在哪里。
有没有办法调试这种错误,或者看到战术脚本生成的(可能是非暂停的)证明术语?
答案 0 :(得分:5)
到目前为止,您可以使用Guarded.
查看证明字词。
另一个可以帮助查看递归出错位置的命令是Fixpoint f (n:nat) : nat.
Proof.
apply plus.
exact (f n).
Guarded.
(* fails with:
Error:
Recursive definition of f is ill-formed.
...
*)
Defined.
,它在到目前为止的证明项上运行终止检查器。但是,您需要将策略脚本拆分为独立的句子才能使用它。这是一个例子:
request.setHeader("authorization", "bearer " + token);
答案 1 :(得分:3)
您可以在校样模式下使用Show Proof.
命令打印到目前为止生成的校样术语。
答案 2 :(得分:3)
除了其他出色的答案,我还想指出,在交互式模式induction
中使用Fixpoint
通常是一个错误,因为您要重复两次。以交互方式编写定位点通常很棘手,因为大多数自动化工具都会在可能的情况下很高兴地进行递归调用,即使它没有根据。
我建议在证明脚本中使用Definition
代替Fixpoint
,并使用induction
。这将调用显式递归,从而可以更好地控制自动化。缺点是灵活性降低,因为定点与递归相比限制更少,但是正如我们所看到的,这既是福也是祸。