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: Sun, 19 Jun 2022 08:19:04 +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-f48.google.com
- Ironport-data: A9a23:7gSQDKsErjuA0zvaLhVqF6qImufnVGhYMUV32f8akzHdYApBsoF/q tZmKWzTOqqCZTemKNEnaIvj8U4BusKAxtdrQQM++H9mESgWgMeUXt7xwmXYb3rDdJWbJK5Ex 5xDMYeYdJhcolv0/ErF3m3J9CEkvU2wbuOgTraCYEidfCc8IMsboUsLd9UR38g527BVPyvX4 Ymo+5OGZgf5s9JJGjt8B5yr+EsHUMva42twUmwWPZina3eD/5W9JMt3yZCZdxMUcKEMdgKJb 7qrIIWCw4/s10xF5uVJPVrMWhZirrb6ZWBig5fNMkSoqkAqSicais7XOBeAAKtao23hojx/9 DlCnbaQUw4JMaPNpL8ySQhnDTkkP6gZw7CSdBBTseTLp6HHW37lwvErAUNveINEqqB4BmZB8 fFeIzcIBvyBr7jukfTrF68235RlcJmD0IA34hmMyRncEPUrWpDfQrrD/94e3TYxmsVmEvPXZ s5fYj1qBPjFS0QQYwZOUclm9AuurmDnfhZ8lHbPnK8m5mL55Sty6on/aNWAL7RmQu0MxhrCz o7cxEzyBQhfP9iCwxKe43e0j6nOmzn6UcQcDtWFGuVChVSSwikeCkRTWwfr5/a+jUG6VpRUL El8FjcSQbYa3myxR/nyURyE+1GeryECQ4BSFrIB51TYokbL2DqxCm8BRz9HTdUpss4qWDAnv mNlefu5VVSDV5XFGRqgGqeoQSCaYndKcDdTDcMQZU5UvIm5+dBbYgfnF447SMaIYsvJ9SYcK g1mQQA7jrQXyMMJjuC1oQCBjDWrqZzECAUy4207v15JDCsoPOZJhKTysTA3CMqsyq7HEzFtW 1BaxaCjABgmV83lqcB0aLxl8EuVz/iEKibAplVkAoMs8T+gk1b6I90NvW4hfB03bppdEdMMX KM1kVMBjHO0FCv6BZKbn6rsYyjX5fO8SY60CKq8giRmO8cuKFfvEN5Sib64hjixyiDAYIkwP pCUdcvEMJrpIfUP8dZCfM9EieVD7nlmmwv7HMmnpzz6j+f2TCPKEd8tbQrWBshkvfjsiFiEo 753aZHWoz0BC7aWSneMoeYuwaUidydT6Wbe8JwJKIZu42NORAkcNhMm6eh+IdI7xvgNzLagE 7PUchYw9WcTTEbvcW2iAk2Popu2NXqmhX5kbyEqI3iy3H0vPdSm4KsFJsk4eLAm8KpoyvstF 6sJfMCJA/JuTDXb+mRFPcOt8tA6LBn71xiTOyeFYSQke8EySgHM/OjidFS9+SQLCB2xqsZj8 aar0RnWQMZYSgk7VJTWZfujwkmfp38YnO4uDULELsMCKkrp+YlubSf2i6Zvcc0LLBzCwBqc1 hqXUU9I/7mT/9dt/YCQ166eroqvH+9vJWZgHjHWveSsKC3X3mu/2osfAuuFeDbqUmmrqqivY ONiye6lbK8KkVNMhIpLE7hxyJU46day9aRRyR5pHSmSYlmmVuFgL32B0ZUdv6FB3OUC6w6/W 0bK99sDfLvVaIXqF1keIAdjZeOGjKlGlj7X5PUzAUP7+C4no+bdABsKZ0GB2H5HMb94EII52 uN96sQY3Aqy10gxOdGcgyEIqmmBci4aX6M8us1ICYPnkFBwmFRLYJiZBy2vpZ/TO5NDNU4lJ jLSj63H3uwOyk3Hens1NH7MwesN2shU6U4SlAcPdwaTh97Ipv4rxxkNoz45eQJYk0dc2OVpN 2k3akB4KM1iJduzaBSvgoxtJ+1AOPFd0kn4yl9MmW+ACkf0BirCK2oyPevL90ccm46Zkv634 5nAoFsJkx6zFC0y4sf2cUFgov3nC9d282UuXei5St+dEcBSjSXN28eTiKlhl/cjKcw0jUzD4 +Jt+Y6crEE92TE4+8UGNmVR6VjcpN1o6oCPrTGNMZ7lxV3hRQw=
- Ironport-hdrordr: A9a23:GhOfb6CiutY4NH7lHemT55DYdb4zR+YMi2TDsHoBMSC9E/bo7v xG+c5w6faaskd1ZJhNo6HjBEDEewK+yXcX2+gs1NWZLW3bUQKTRekI0WKh+V3d8kbFh4lgPM lbAs5D4R7LYWSST/yW3OB1KbkdKRC8npyVuQ==
- Ironport-phdr: A9a23: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 klQqY4=
- Ironport-sdr: ZuF40AGGkm6Cvdz5NpsEReDZWZWFAS5IbyHxgd9oao8PX4V/jEFZW0j72hgWbdLvVGPj+pc9Bn /f4IrEAsY9yJ6vlCRSfCq+Nb95OjB08jCVU7oPXy+AlHvV0rSF70VYSgbvSrgMO8gqmbEFyQgs dTYO0DqOm+SEaJGmnfQlxDBImLrZ4Gzb6t7x7xBAZ/2GPPTXN/79ozZchwWZyjyAALWriMVWTj zYWCXK2/QaF8T1Jd/GJhAI9B+dmYrwjpKFarJRQJVbrcZ1lsOs4JzN7jOYZm0E3gu6sCTH//y2 Gx84weCfLfB1+qYxH13P01vW
Thanks Dominique, your hint was more than enough to discharge the proof [1].
Best,
Mukesh
[1] https://github.com/mukeshtiwari/CoqUtil/blob/main/src/Fin.v#L270-L322
On Sat, Jun 18, 2022 at 6:16 PM Dominique Larchey-Wendling
<dominique.larchey-wendling AT loria.fr> wrote:
>
> Hi Mukesh,
>
> "Understandable but I have mt = S nt so I get ..." from [1]
>
> Be careful, the identity mt = S nt does *not* make nt a sub-term
> of mt.
>
> The sub-term relation *cannot be expressed* by a term of the
> Coq language, it is only recognized by the type-checker.
>
> Basically here, you need to destruct mt as [ | nt' ],
> *call the fixpoint on nt'* and then possibly rewrite nt'
> as nt after having proved that nt = nt'. The case where
> mt is 0 can be discriminated away.
>
> Best,
>
> Dominique
>
> ----- Mail original -----
> > De: "mukesh tiwari" <mukeshtiwari.iiitm AT gmail.com>
> > À: "coq-club" <coq-club AT inria.fr>
> > Envoyé: Samedi 18 Juin 2022 09:52:29
> > Objet: Re: [Coq-Club] Custom Induction Principal for le_unique
>
> > 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+.