如何从字面上展开Coq不动点

如何从字面上展开Coq不动点,coq,coq-tactic,Coq,Coq Tactic,我试图展开一个固定点定义并获得定义的主体。但是Coq并没有给出确切的定义。相反,它给了我一些以(fix…)开头的东西,我无法使用它们 例如,在从 国家是: ... ______________________________________(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:

我试图展开一个
固定点
定义并获得定义的主体。但是Coq并没有给出确切的定义。相反,它给了我一些以
(fix…
)开头的东西,我无法使用它们

例如,在从

国家是:

...
______________________________________(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)).
我试图通过以下方式使它成为一个微不足道的平等:

unfold Fix_F at 2.
然而,我在RHS上得到了类似于
(fix\u 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
问题是:

是否有办法将上述
固定点
展开至其功能体?

注意:我知道有一个变通方法可以证明这个例子

Proof. intros. destruct r. simpl. trivial. 
  Defined.

但是我更感兴趣的是
展开
-ing方法,如果它是有效的。

你能明确地写下你的预期目标吗?我不相信这是可能的,因为它不是
定义
,而是
固定点
,所以定义就是你在
展开
中得到的。不过我不是COQ专家。@Elazar,不动点定义的主体是:
fx(fun(y:a)(p:ryx)=>Fix\fy(Acc\u inv x ryp))
。我希望通过“展开”得到这个,然后要证明的是一个反身性。你能解释一下你提到的
定义
固定点
之间的区别,以及为什么不可能按原样扩展固定点定义吗?据我所知,
固定点
是调用函数
固定点
(我想是COQ固有的)的语法糖,这就是。实际定义正是您在
展开后看到的定义。按原样扩展固定点定义意味着您删除了语法上的糖分,留下了不同的定义。@Elazar的注释是正确的。在这里,您真正想要的不是展开定义,而是执行一步计算。要做到这一点,请尝试
cbv
。你能明确地写下你的预期目标吗?我认为这是不可能的,因为它不是
定义
,而是
固定点
,所以定义就是你在
展开
中得到的。不过我不是COQ专家。@Elazar,不动点定义的主体是:
fx(fun(y:a)(p:ryx)=>Fix\fy(Acc\u inv x ryp))
。我希望通过“展开”得到这个,然后要证明的是一个反身性。你能解释一下你提到的
定义
固定点
之间的区别,以及为什么不可能按原样扩展固定点定义吗?据我所知,
固定点
是调用函数
固定点
(我想是COQ固有的)的语法糖,这就是。实际定义正是您在
展开后看到的定义。按原样扩展固定点定义意味着您删除了语法上的糖分,留下了不同的定义。@Elazar的注释是正确的。在这里,您真正想要的不是展开定义,而是执行一步计算。要做到这一点,请尝试
cbv
Proof. intros. destruct r. simpl. trivial. 
  Defined.