我试图展开Fixpoint
定义并获得定义的主体。但是Coq不会从字面上给出定义的正文。相反,它给了我一些以(fix ...)
开头的东西,我无法使用它。
例如,在Coq.Init.Wf
中证明以下内容Lemma Fix_F_eq :
forall (x:A) (r:Acc x),
F x (fun (y:A) (p:R y x) => Fix_F y (Acc_inv x r y p)) = Fix_F x r.
Proof. intros.
州是:
...
______________________________________(1/1)
F x
(fun (y : A) (p : R y x) =>
Fix_F y (Acc_inv x r y p)) =
Fix_F x r
现在,RHS上的Fix_F
定义与LHS完全相同:
Fixpoint Fix_F (x:A) (r:Acc x) {struct r} : P x :=
F x (fun (y:A) (p:R y x) => Fix_F y (Acc_inv x r y p)).
我试图通过以下方式使其成为trivial
平等:
unfold Fix_F at 2.
然而,我在RHS上得到了类似(fix Fix_F ... )
的内容,我无法继续沿着这条线前进:
______________________________________(1/1)
F x
(fun (y : A) (p : R y x) =>
Fix_F y (Acc_inv x r y p)) =
(fix
Fix_F (x0 : A) (r0 : Acc x0) {struct r0} :
P x0 :=
F x0
(fun (y : A) (p : R y x0) =>
Fix_F y (Acc_inv x0 r0 y p))) x r
问题是:
有没有办法将上述Fixpoint
展开到函数正文中?
注意:我知道有一种解决方法可以证明这个例子。
Proof. intros. destruct r. simpl. trivial.
Defined.
但如果它有效,我对unfold
方法更感兴趣。