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: Mon, 6 Jun 2022 19:04:24 +0100
- Authentication-results: mail2-smtp-roc.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-ed1-f53.google.com
- Ironport-data: A9a23:NdUHaKhGCWGPJXj+NyjyCQYGX161XhYKZh0ujC45NGQN5FlHY01je htvXW6Hb6yOMzemLYgiPdjn9UtXuMSAn9YwSAZspSpjRXhjpJueD7x1DG+gZnLIdpWroGFPt phFNIGYdKjYaleG+39B55C49SEUOZmgH+a6UKieUsxIbVcMpB0J0HqPoMZkxN8x6TSFK1nV4 4mq/ZWBYAbNNwNcawr41YrT8HuDg9yp4Fv0jnRmDRyclAK2e9E9VfrzFInpR5fKatE88t2SG 44v+IqEElbxpH/BPD8KfoHTKSXmSpaKVeSHZ+E/t6KK2nCurQRquko32WZ1hUp/0120c95NJ NpluaGPQzcTHP32iacAST94Lg1GHJZI9+qSSZS/mZT7I0zudnLtx7BjABhzM9BDvOlwBm5K+ LoTLzVlghKr3brnhuLmDLM01oJ+d6EHP6tH0p1k5TTEDvs9QYzCXKzQ5JlZ3TYsg+hBGP/fY 4wSbj8HgBHoOEwRZAhMWMpWcOGAlHvEQThWpwysvfB0xEuC7z0t77XtCY+AEjCNbZwNwhzwS nj912/+G1QRMMGV4SGU92qlwO7JhyLyHowIfIBU7dZviVyXg2EfUVgYCAD9rv6+hUqzHdlYL iT45xbCs4A+yXOhfuPfDyep42OemD4hd+JxKOM1vVTlJrXv3y6VAW0NTzhkYdMgtdMrSTFC6 rNvt4O2bdCImO3FIU9x5ot4vhvpZndIdT5qiTssCFpas4O68enfmzqWFo47eJNZmOEZDt0Z/ txnhC03hrFWgMJSkqvmphbIhDWjopWPRQkwjuk2Yo5HxlMkDGJGT9bwgbQ+0RqmBNjCJrVml CZY8/VyFMhUUfmweNWlGY3h5o2B6fefKyH7ilVyBZQn/DnF0yf9INwMvWoufhg0b5dsldrVj Kn76Vw5CHh7bCvCUEOLS9/Z5zkClvS8T4u9CJg4kPIXMsEhLmdrAx2ClWbJhzy3+KTdua44P piffK6R4YUyWMxaIM6Nb75Fi9cDn3hgrUuKHMyT50n5jNK2OSHNIZ9YYQPmRr1ot8us/VSFm /4BbZfi40sEC4XWPHKHmbP/2HhQchDX87it+5IJHgNCSyI6cFwc5wj5m+94JtY4wPoNzI8lP BiVAydl9bY2vlWfQS3iV5ypQOqHsU9XoS1pMCoyE0yv3nR/M4+j4L1OJZQydLgjsudkyKcsH fUCfsyBBNVJSyjGq2xNN8mj8NQ6eUT5nx+KMgqkfCM7IMxtSgnPzdnuIVni+SwIOSyouJZsu LanzA7aHcEOSl06XsbbYf6i1X2run0ZlL4gVkfEOIgBd0Dl8YwsICv016dlL8YJIBTF5z2by wfGWUdC9beR+9c4qYCbi7qFooGlF/pFMnBbR2SLv6yrMST6/3a4xdASXeuNewfbXjym9ainY 9JT0KigYvAKmVB9s718Haxu+qQw6oa9vLRd1AllQCzGYln3WLNtJn6KgZtGuqFXnOQLvAK3X geC9oAfN+jSfsziF1EVKUwuaeHajaMYnTzb7PIUJkTm5X8ooODWDx0KZxTc2jZAKLZVMZ8+x btzssAh7QHi2AEhNcyLj3wJ+mnQfGYMVb4r6sMTDIPx0FF5z1hDZdnRBnaz7szULdpLNUYuL 3mfg6+b3+ZQwU/LcnwSE3nR3LoC2c5f5kgSlFJSdU6Untflh+Ms2EED+zoASAkInA5M1Ph+O zQ2OkB4TUlUE+yEWCSes6GQ9wB96Nmx/0Xwzx4EmDScQRTzEGPKK2I5NKCG+0VxH6ewuNRE1 Onw9YoneW+CkALNMu8aVktsqvilRtt0nuEHsN7yBNyLRvHWfhK86pJDpgM0R9/PDsY4hUmBr u5vlAq1hWsXKgZIy5AG50KmOXj8hfxKyKGugR2swU/RIVzhRQ==
- Ironport-hdrordr: A9a23:dzYukKw7z8ntQJ+750WVKrPwE71zdoMgy1knxilNoHtuA7Slfq GV7Y0mPHrP4gr5N0tQ/OxoVJPwI080sKQFgrX5Xo3CYOCFghrNEGgK1+KLqAEIWRefygc379 YGT0ERMqyXMbG4t6rHCcuDfurIDOPpzElgv4nj80s=
- Ironport-phdr: A9a23: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 ZsKDLRcUQ5tfhv1IktgFd0GZpxwW2F9+YM=
- Ironport-sdr: 6sCc/BXBd0K8KiXez5Fci9s0isRqXyr3fA16dflDTMCSm7tJlw9Mtff8+NZr8vWhp3LPnpvusZ VrG/mQ8//udC3q6R85xIris6nmSCtw0LG1xUfGtO68mZSFEzn0Nm/i9H5xFB1wkYV0+mgbcjv8 9h9mTSbDf7DyY0NaGlD5S/D6dEQ+Sjaj9nnaIRGAuIUzSMm8woeLmKk+ZaxI/A1uPaL5jZ4eBV qSrCpFqe4JIAYZ50FpJZ8xMGsuorfblbXvhNPx3EyiBDDxoFfIWNj3MIH5y+w+n/DseyTGnjdh d57iDhyPBS+0j3TAlmCL46ct
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+.