Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Stuck with weird goal imposed by Fix_eq


Chronological Thread 
  • 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: Sun, 29 Jan 2023 17:56:55 +0530
  • Authentication-results: mail3-smtp-sop.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-f182.google.com
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:WPfwAa/fYVUxs5ie1w5uk+DhI+orL9Y04lQ7vn2ZKCYlC/Bw8v rFoB11726QtN98YgBDpTnEAtjifZq+z/9ICOsqTNOftWDd0QPCEGgh1+vfKlbbakrDH4BmpM FdmmtFZOEYz2IWsS832maF+h8bruW6zA==
  • Ironport-phdr: A9a23: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 klRqY4=
  • Ironport-sdr: 63d6661d_IXl+SRasDhDkUCELq2qGhzRleTjO7jopJEiEO5V7/yzkust v9DArARG38GH/iMf3+AEDDFA+Enr3bG9xgsr2hQ==

Hi 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 operator
and 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 there
is no way out of it, unless assuming FunExt. Which I
guess you do not want to do.

The thing is, the generic fixpoint equation for "Fix"
called "Fix_eq" is *too restrictive* when defining values
in 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 fixpoint
equation "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 extensional
equality for functions, instead of (Coq defined) equality.

Below I suggest such a relaxation "Fix_equiv"
which works in your case, with the noticable
further assumption that eq (from Xavier Leroy's
code assumptions) must be reflexive,
something which is not assumed in XL's code.
I will investage this further but here is some code
that 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 a
    transitive 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 in 
  match 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.



Archive powered by MHonArc 2.6.19+.

Top of Page