coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Madhukar <madhukar.yerraguntla AT gmail.com>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq
- Date: Mon, 30 Jan 2023 18:00:49 +0530
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=madhukar.yerraguntla AT gmail.com; spf=Pass smtp.mailfrom=madhukar.yerraguntla AT gmail.com; spf=None smtp.helo=postmaster AT mail-yb1-f178.google.com
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:W9SutqPBALHOTsBcTvijsMiBIKoaSvp037BL7TEJdfUxSKalfq +V7ZEmPHPP+VQssTQb6LO90cq7IE80l6QFhbX5VI3KNGLbUSmTTL2KhrGSpAEIdReOkNK1Fp 0NT0G9MrDN5JRB4voSKTPXL+od
- Ironport-phdr: A9a23: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 hoMh7j/KNZLXrA=
- Ironport-sdr: 63d7b889_zWZkYuBPBGbdxLH3nz+3sEXeEe81p03k0XH2PsTettRb3aY S7bLH8cmvt2VT8l4V/BSZHdWxirv2Ohxdm16lZw==
Hi Dominique,
Thanks again for going above and beyond to help me with this problem. This is a much cleaner version. The previous solution taught me how to navigate the pitfalls of reasoning with higher order of equality than I am used to. I love the simplicity of this solution compared to the last one.
Regards,
Madhukar
On Mon, Jan 30, 2023 at 3:59 PM Dominique Larchey-Wendling <dominique.larchey-wendling AT loria.fr> wrote:
Hi Madhukar,I did investigate your question a bit further and I found a solutionyou might like better. It involves using "Fix_F" instead of "Fix".Notice that "Fix" is defined in terms of "Fix_F" anyway in theStdLib. Using "Fix_F", you get definitional equalities andyou can prove the fixpoint equations "fixpoint' = F fixpoint'"w/o the assumption "eq x x".Hence, the extentionality assumption is only required whenmanipulating "Fix", and not with "Fix_F".See below,Best regards,DominiquePS: notice that the proof of iterate'_eq uses *dependentrecursion* on "Acc" via "Acc_inv_dep" instead of havingto assume gt_wf, so this hypothesis can be delayedfurther, just before the actual definition of the "fixpoint'".-----------------Section KNASTER_TARSKI.Variable A: Type.Variable eq: A -> A -> Prop.Variable eq_dec: forall (x y: A), {eq x y} + {~eq x y}.Variable le: A -> A -> Prop.Hypothesis le_trans: forall x y z, le x y -> le y z -> le x z.Hypothesis eq_le: forall x y, eq x y -> le y x.Definition gt (x y: A) := le y x /\ ~eq y x.Variable bot: A.Hypothesis bot_smallest: forall x, le bot x.Section FIXPOINT.Variable F: A -> A.Hypothesis F_mon: forall x y, le x y -> le (F x) (F y).Lemma iterate_le:forall (x: A) (PRE: le x (F x)), le (F x) (F (F x)).Proof. intros; apply F_mon, PRE. Qed.Let P x := le x (F x) -> A.Local Definition G x (loop : forall y, gt y x -> P y) hx :=let x' := F x inmatch eq_dec x x' with| left e => x| right ne => loop x' (conj hx ne) (F_mon _ _ hx)end.Definition iterate' := Fix_F P G.Lemma iterate'_eq x (a : Acc gt x) PRE : eq (iterate' x a PRE) (F (iterate' x a PRE)).Proof.induction a as [ x ] in PRE |- * using Acc_inv_dep; cbn; unfold G.destruct (eq_dec x (F x)); eauto.Qed.Hypothesis gt_wf: well_founded gt.Definition fixpoint' := iterate' bot (gt_wf bot) (bot_smallest (F bot)).Theorem fixpoint'_eq : eq fixpoint' (F fixpoint').Proof. apply iterate'_eq. Qed.End FIXPOINT.End KNASTER_TARSKI.Check fixpoint'_eq.Require Import Extraction.Extraction Inline G.Recursive Extraction fixpoint'.De: "Madhukar" <madhukar.yerraguntla AT gmail.com>
À: "coq-club" <coq-club AT inria.fr>
Envoyé: Dimanche 29 Janvier 2023 13:26:55
Objet: Re: [Coq-Club] Stuck with weird goal imposed by Fix_eqHi Dominique,Thanks a lot for the clear explanation and the fixed code(bad pun?). I am really grateful for the help. I will get back to you in case of any further questions.Thanks,Madhukar
On Sun, Jan 29, 2023 at 3:22 PM Dominique Larchey-Wendling <dominique.larchey-wendling AT loria.fr> wrote:Hi Madhukar,You are trying to prove fixpoint equations for the Fix operatorand this can sometimes be difficult indeed.
======================================================
(fun nle : le x0 (F x0) => f (F x0) (conj nle n) (iterate_le x0 nle)) =
(fun nle : le x0 (F x0) => g (F x0) (conj nle n) (iterate_le x0 nle))
Typically that one above is going to get you stuck for a while ...Indeed, it is an identity between two *functions* and thereis no way out of it, unless assuming FunExt. Which Iguess you do not want to do.The thing is, the generic fixpoint equation for "Fix"called "Fix_eq" is *too restrictive* when defining valuesin a function space, which is what you do with| Definition iterate': forall x : A, le x (F x) -> A.because the output value is in "P x := le x (F x) -> A"and "P x" is a space of functions.To work this out, you have to relax the fixpointequation "Fix_eq" to an arbitrary binary relation over"P x", ie not just (Coq defined) equality over "P x".Then you can use this relaxation with extensionalequality for functions, instead of (Coq defined) equality.Below I suggest such a relaxation "Fix_equiv"which works in your case, with the noticablefurther assumption that eq (from Xavier Leroy'scode assumptions) must be reflexive,something which is not assumed in XL's code.I will investage this further but here is some codethat works using "Fix" (and hence "Fix_F") and"Fix_equiv".Best regards,Dominique-----------Section Acc_eq.Context {X : Type} (R : X -> X -> Prop).Inductive Acc_eq : forall {x}, Acc R x -> Acc R x -> Prop :=| Acc_eq_intro : forall x H1 H2, (forall y Hy, Acc_eq (H1 y Hy) (H2 y Hy)) -> Acc_eq (Acc_intro x H1) (Acc_intro _ H2).Hint Constructors Acc_eq : core.Theorem Acc_eq_total : forall {x} (H1 H2 : Acc R x), Acc_eq H1 H2.Proof. induction H1 using Acc_inv_dep; intros []; auto. Qed.End Acc_eq.Section Fix_equiv.(* This one generalizes Fix_eq replacing equality eq/=with an arbitrary (polymorphic) binary relation on P x *)Variables (A : Type) (R : A -> A -> Prop) (Rwf : well_founded R)(P : A -> Type) (E : forall x, P x -> P x -> Prop).Infix "~~" := (E _) (at level 70).Variables (F : forall x, (forall y, R y x -> P y) -> P x)(F_ext : forall x (f g : forall y, R y x -> P y),(forall y p, f y p ~~ g y p) -> F x f ~~ F x g).Lemma Fix_F_ext x (p q : Acc R x) : Fix_F P F p ~~ Fix_F P F q.Proof. induction (Acc_eq_total R p q); eauto. Qed.Lemma Fix_F_equiv x r : F x (fun y p => Fix_F P F (Acc_inv r p)) ~~ Fix_F P F r.Proof. rewrite Fix_F_eq; apply Fix_F_ext. Qed.Hint Resolve Fix_F_ext : core.Theorem Fix_equiv x : Fix Rwf P F x ~~ F x (fun y _ => Fix Rwf P F y).Proof. unfold Fix; destruct (Rwf x); simpl; auto. Qed.End Fix_equiv.(* Compare how Fix_equiv generalizes Fix_eq *)Check Fix_eq.Check Fix_equiv.Section KNASTER_TARSKI.(** Consider a type [A] equipped with a decidable equality [eq] and atransitive ordering [le]. *)Variable A: Type.Variable eq: A -> A -> Prop.Variable eq_dec: forall (x y: A), {eq x y} + {~eq x y}.Variable le: A -> A -> Prop.Hypothesis le_trans: forall x y z, le x y -> le y z -> le x z.Hypothesis eq_le: forall x y, eq x y -> le y x.(** This is the strict order induced by [le]. We assume it is well-founded:all strictly ascending chains are finite. *)Definition gt (x y: A) := le y x /\ ~eq y x.Hypothesis gt_wf: well_founded gt.Section FIXPOINT.(** Let [F] be a monotonically increasing function from [A] to [A]. *)Variable F: A -> A.Hypothesis F_mon: forall x y, le x y -> le (F x) (F y).Lemma iterate_acc:forall (x: A) (acc: Acc gt x) (PRE: le x (F x)) (NEQ: ~eq x (F x)), Acc gt (F x).Proof.intros. apply Acc_inv with x; auto. split; auto.Defined.Lemma iterate_le:forall (x: A) (PRE: le x (F x)), le (F x) (F (F x)).Proof. intros; apply F_mon, PRE. Qed.Let P x := le x (F x) -> A.Let EQ x (u v : P x) := forall p, eq (u p) (v p).Let G x (loop : forall y, gt y x -> P y) hx :=let x' := F x inmatch eq_dec x x' with| left e => x| right ne => loop x' (conj hx ne) (F_mon _ _ hx)end.Let Fix_G_equiv := Fix_equiv _ _ gt_wf P EQ G.(* Cannot get rid of that one ... *)Hypothesis eq_refl : forall x, eq x x.Let G_ext x (f g : forall y : A, gt y x -> P y) :(forall (y : A) (p : gt y x), EQ y (f y p) (g y p)) -> EQ x (G x f) (G x g).Proof.intros H p.unfold G.destruct (eq_dec x (F x)).+ apply eq_refl.+ apply H.Qed.Definition iterate' x : P x := Fix gt_wf _ G x.Fact iterate'_eq x (PRE : le x (F x)) :eq (iterate' x PRE) (G x (fun y _ => iterate' y) PRE).Proof. apply Fix_G_equiv, G_ext. Qed.End FIXPOINT.End KNASTER_TARSKI.
- [Coq-Club] Stuck with weird goal imposed by Fix_eq, Madhukar, 01/29/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Dominique Larchey-Wendling, 01/29/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Madhukar, 01/29/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Dominique Larchey-Wendling, 01/30/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Madhukar, 01/30/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Dominique Larchey-Wendling, 01/30/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Madhukar, 01/29/2023
- Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq, Dominique Larchey-Wendling, 01/29/2023
Archive powered by MHonArc 2.6.19+.