Как развернуть Coq Fixpoint буквально

Я пытался раскрыть 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

Сейчас, Fix_F на RHS было определено точно так же, как на 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.

Тем не менее, я получил что-то вроде (fix Fix_F ... ) на RHS, и я не могу идти дальше по этой линии:

______________________________________(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 ответов

Другие вопросы по тегам