Как развернуть 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
подход, если он действителен.