我正试图证明这一点:
Fixpoint max(a: nat)(b:nat): nat :=
if a <=? b then b
else a.
Example ex: forall n:nat, n = max n n.
Proof.
intros.
(...)
简单和cbn策略不会产生任何效果。 如果我叫cbv [max],那么我得到一个redex,但之后我不知道如何继续证明。更准确地说,我得到:
n = (fix max (a b : nat) {struct a} : nat := if a <=? b then b else a) n n
如何摆脱此重做(fix max ....) n n
?
答案 0 :(得分:3)
即使函数不是递归的,也存在Fixpoint
,这就是fix
的来源。请改用Definition
。
fix
仅在结构递减的参数(此处为n
,第一个)以构造函数开头时才减小。因此,如果您的函数确实打算递归,则可以使用destruct n.
。