coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Custom Induction Principal for le_unique
- Date: Sat, 18 Jun 2022 08:52:29 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mukeshtiwari.iiitm AT gmail.com; spf=Pass smtp.mailfrom=mukeshtiwari.iiitm AT gmail.com; spf=None smtp.helo=postmaster AT mail-ej1-f52.google.com
- Ironport-data: A9a23:mmXDe6ICx+2qM9ZpFE+R7pMlxSXFcZb7ZxGr2PjKsXjdYENS1jQFn 2ZNWWiFb/jZYTT2fY1ybIy0oE5S65ODzt5iGgId+CA2RRqmi+KVXIXDdh+Y0wC6d5CYEho/t 63yTvGacajYm1eF/k/F3oDJ9CU6jefSLlbFILas1hpZHGeIcw98z0M58wIFqtQw24LhXVrT4 Y+aT/D3YTdJ5RYkagr41IrY8HuDjNyq0N/PlgFWiVhj5TcyplFNZH4tDfnZw0jQHuG4KtWHq 9Prl9lVyI92EyAFUbtJmp6jGqEDryW70QKm0hK6UID66vROS7BbPqsTbJIhhUlrZzqhrYpWi 9IXvI6JVwp2E7fJt7tDSSZoDHQrVUFG0OevzXmXtMWSywjLcSKpzag0Sk4xOoIc96B8BmQmG f4wcmhcKEDewbjvkPTmEIGAhex7RCXvFIYCuXx7zS3YEv88QNbCQqTW4PdX2T4xgoZFGvO2i 88xMGU2ME2ZM00n1lE/D4tnuvnxllXFLmcBjU7Mg5sS2y/Qw1kkuFTqGIONJobiqd9utk2fv yfN+3nzKgoLMcSWjzuD6HOlwOHV9R4XQ6oXHby8s/No2RidmzZVBxoRWl+25/K+jyZSRu6zN WQmoA1tqvI75nW1Q4bQRRiX/yCegS4DDo84//IB1CmBza/d4gC8D2cCTyJcZNFOiCPQbWx6v rNut4O5bQGDoIF5WlrGqejJ9WLa1Tw9aD5dNXVdHGPp9vG6+Nlr5i8jWOqPB0JcszEYMTT5w jTPoSpnwrtO14gE0KK0+V2BiDWpznQocuLXzlWPNo5GxlkhDGJAW2BOwQaFhRqnBNjHJmRtR FBex6CjABkmVPlhbhClTuQXB62O7P2YKjDailMHN8B/qmnxqib9J94Ku20WyKJV3iAsKW+Bj Kj76VM52XOvFCbCgVJfON7tUZV0l8AM6/y8Ca6LNbKinaSdhCfepH00DaJh92/ql0conMkC1 WSzIK6R4YIhIf0/llKeHr9NuZdyn3xW7T6NGPjTkkv/uZLDNSb9YepUazOmM7FphIva+lm92 4gEbKOilU4PONASlwGNrub/23hRfSZlbX03wuQLHtO+zv1OQzxwUaaLmOt5E2Gn9owM/tr1E riGchcw4DLCabfvcG1ms1hvN+HiW4hRt3U+MXB+NFqkwSlxboOm7aNZfJwyJOF1+OtmxP9yb v8EZ8TQWqQVGmqbo2wQPcvnsYhvVBW3ngbRbSeoZT4IeZQ/FQHE/9nTeBTiqXsVBS2tuMpi+ LCtj1uJQZcKSwl4ItzRbfajkwG4sXQHybB9WkLJJp9Yf0C1qNpmLCn4j/kWJcAQKEWblmHKi VrOWRpB/LvDuY449tXNlJuolYbxHrssBFdeEkna8a2yanvX82+l9olKD7SFcDXbY2Xrofnwa OhQycb8B/0JhlN9tYRxTuRwxqUk6tqz/rJXw1g2HHjPaFj3WLpsLmPchptKv6xJg7Jb4E64B xjJ9d5dNrGEfsjiFQdJdgYia+2C09ASmyXTvatpehSkvHcv8erVS1hWMjmNlDdZcOl/PrQjz Lpzo8UR8QG+1kcnP4rUlCxS7GjQfHUMX7997cMfCY7vzwcpkxRMPMaaBSjx75WCLd5LNxByc DOTgaPDgZVax1bDIyVvTymThbIFiMRcog1OwX8DO0+NxojPiMgx0UAD6j8wVAlUkkhK3u8b1 rKH7KGpyXhiPguEhfSvm0ipEgBFQRCbown/lgFPm2reQE2lEGfKKQXR/ApLEF8xqwphkvpzp dl0C1oJlR7lecjw2m05XksNRznLU4lq7gOb8Cy4N53tInT5CAYJRoehYGMJr13sBsZZaIgrY wV11L4YVJAX/hL8b0H250d2GFjQpN25yLR+fMxc
- Ironport-hdrordr: A9a23:3cmmTqicZmxqEizDipcLf1fNaHBQXuUji2hC6mlwRA09TyX+rb HXoB17726MtN91YhsdcL+7Scy9qB/nhPxICMwqTNSftWrd2VdATrsSibcKqgeIc0bDH6xmtZ uIGJIOb+EYY2IK6/oSIzPVLz/j+rS6GWyT6ts2Bk0CcT1X
- Ironport-phdr: A9a23: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 3M1
- Ironport-sdr: fN8Sw3DGyAgiD6webUoVflPtuZEAKyk9vsOL7l0sE2dJY05QHtH6qp5MyCH3gzyW7l9sek1WaQ cdrS2PGitSh/P8iS+c4oJzc4zfXvAa+qa4w/gOqkHoM+Mf/Wdb3e/3rom2PHJgPVSFoCp560pN tolapOggE1j4+939cyHZVr5tYM4DJgM3e0ydfpOXAwTzOLNWVHZQo++GafkjOVnnJY3gsh3RKL YoSXB7XP5icNyA675AkGs2eJdTBKSpPq5uv9PTDpX81P73+vcFVrS15rJI+fO7grBaSt93qdxh LeGQbW3bISA8BwgWGppkMxSd
Hi everyone,
I have made some progress on this, and now I am facing one last
obstacle [1]. How can I replace a term in this expression 'P (S nt)
(le_S n nt Hnt) (eq_rect nw (fun w : nat => n <= S w) (le_S n nw Hnw)
nt pf)' by another equal term without causing ill-typed error. In
particular, I want to replace all the occurrences of nt by mt' and
replace pf by Hmnw. I want to discharge this goal [1] (also
copy-pasted below).
n, m: nat
P: forall m : nat, n <= m -> n <= m -> Prop
mt: nat
Hna: n <= mt
nt: nat
Hnt: n <= nt
Heq: mt = S nt
nw: nat
Hnw: n <= nw
pf: nw = nt
mt': nat
Hmm: nt = mt'
Hmnw: nw = mt'
============================================================
P (S nt) (le_S n nt Hnt) (eq_rect nw (fun w : nat => n <= S w) (le_S n
nw Hnw) nt pf)
Best,
Mukesh
[1]
https://gist.github.com/mukeshtiwari/66a24eff6ac598e691c341d3faafb5d2#file-custom-v-L98
On Mon, Jun 6, 2022 at 7:04 PM mukesh tiwari
<mukeshtiwari.iiitm AT gmail.com> wrote:
>
> Hi Dominique,
>
> Thank you very much for your response. It is much clearer now. At
> least, now I can see the structure of the proof.
>
> (* I am posting it here because not many people from Coq mailing list
> are on Zulip chat *)
> Also, yesterday during this proof I realised that the induction
> principle for `le` is not strong enough so I used the 'Scheme le_indd
> := Induction for le Sort Prop. ' to derive a more general one, but I
> could not finish the proof, but Paolo Giarrusso, at Zulip chat, came
> up with this proof using the Equations package. I don't understand
> all the machinery behind the 'dependent elimination' from Equations
> but it's really making life easy.
>
> Require Import Lia.
> Require Import Equations.Prop.Equations.
> Scheme le_indd := Induction for le Sort Prop.
>
> Set Equations With UIP.
>
> Lemma le_unique : forall {m n : nat}
> (p q : m <= n), p = q.
> Proof.
> induction p using le_indd.
> + intros Hq.
> dependent elimination Hq; [|lia].
> easy.
> + intros Hq.
> dependent elimination Hq; [lia|].
> f_equal.
> apply IHp.
> Qed.
> Print Assumptions le_unique. (* Closed under the global context *)
>
> Best,
> Mukesh
>
>
> On Sun, Jun 5, 2022 at 8:46 PM Dominique Larchey-Wendling
> <dominique.larchey-wendling AT loria.fr> wrote:
> >
> > Hi Mukesh,
> >
> > Maybe this one gives a better intuition?
> > But it does not go through a double induction principle.
> > Rather the classic combination of induction and then inversion.
> >
> > Best,
> >
> > D.
> >
> > --------
> >
> > Require Import Eqdep_dec Arith.
> >
> > Fact uip_nat {n : nat} (e : n = n) : e = eq_refl.
> > Proof. apply UIP_dec, eq_nat_dec. Qed.
> >
> > Fact le_inv n m (H : n <= m) :
> > (exists e : m = n, eq_rect _ _ H _ e = le_n n)
> > \/ (exists m' (e : m = S m') (H' : n <= m'), eq_rect _ _ H _ e = le_S _
> > _ H').
> > Proof.
> > revert m H.
> > intros ? [ | m H ].
> > + left; now exists eq_refl.
> > + right; now exists m, eq_refl, H.
> > Qed.
> >
> > Check lt_irrefl.
> >
> > Lemma le_unique : forall {m n : nat}
> > (p q : m <= n), p = q.
> > Proof.
> > intros m. refine (fix loop n p { struct p } := _).
> > destruct p as [ | n p ]; intros q.
> > + clear loop; destruct (le_inv _ _ q) as [ (e & H) | (m' & e & H1 & H2)
> > ].
> > * now rewrite (uip_nat e) in H.
> > * exfalso; subst; clear H2.
> > now apply lt_irrefl in H1.
> > + specialize (loop _ p).
> > destruct (le_inv _ _ q) as [ (e & H) | (m' & e & H1 & H2) ].
> > * clear loop; exfalso; subst; clear H.
> > now apply lt_irrefl in p.
> > * injection e; intros H3.
> > revert e H1 H2; rewrite <- H3; intros e H1 H2.
> > rewrite (loop H1).
> > rewrite (uip_nat e) in H2; simpl in H2; subst q.
> > f_equal; apply loop.
> > Qed.
> >
> >
> > ----- Mail original -----
> > > De: "mukesh tiwari" <mukeshtiwari.iiitm AT gmail.com>
> > > À: "coq-club" <coq-club AT inria.fr>
> > > Envoyé: Dimanche 5 Juin 2022 20:12:47
> > > Objet: [Coq-Club] Custom Induction Principal for le_unique
> >
> > > Hi everyone,
> > >
> > > I am trying to understand this proof [1]. It is very difficult to
> > > understand by replaying the proof so I decided to write a custom
> > > induction principle (le_pair_ind) which would make the proof trivial
> > > and easier to read. However, I am stuck with a pattern in le_pair_ind.
> > > In le_pair_ind, the first pattern, on l, is fine but the problem
> > > arises in the second pattern match, on h. I don't know how to force h
> > > to be le_n. Any help would be appreciated.
> > >
> > >
> > >
> > > Lemma le_pair_ind :
> > > forall (n : nat)
> > > (P : forall m : nat, n <= m -> n <= m -> Prop),
> > > P n (le_n n) (le_n n) ->
> > > (forall (m : nat) (l h : n <= m), P m l h ->
> > > P (S m) (le_S n m l) (le_S n m h)) ->
> > > forall (m : nat) (l h : n <= m), P m l h.
> > > Proof.
> > > intros ? P Hb Hc.
> > > refine(
> > > fix Fn m l :=
> > > match l as lp in (_ <= mp) return forall h, P mp lp h with
> > > | le_n _ => fun h => _ (* I DON'T KNOW HOW TO FORCE h TO BE le_n
> > > *)
> > > | le_S _ m lp => _
> > > end).
> > > Admitted.
> > >
> > > Lemma le_unique : forall {m n : nat}
> > > (p q : m <= n), p = q.
> > > Proof.
> > > intros ? ? ? ?.
> > > apply (le_pair_ind m
> > > (fun (n : nat) (a : m <= n) (b : m <= n) => a = b)).
> > > + exact eq_refl.
> > > + intros ? ? ? He;
> > > subst; reflexivity.
> > > Qed.
> > >
> > > Best,
> > > Mukesh
> > >
> > > [1]
> > > https://github.com/coq/coq/blob/master/theories/Arith/Peano_dec.v#L40
- [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/05/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, Dominique Larchey-Wendling, 06/05/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/06/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/18/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, Dominique Larchey-Wendling, 06/18/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/19/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, Dominique Larchey-Wendling, 06/18/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/18/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, mukesh tiwari, 06/06/2022
- Re: [Coq-Club] Custom Induction Principal for le_unique, Dominique Larchey-Wendling, 06/05/2022
Archive powered by MHonArc 2.6.19+.