如何从字面上展开Coq Fixpoint

时间:2016-07-27 04:03:19

标签: coq coq-tactic

我试图展开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方法更感兴趣。

0 个答案:

没有答案