coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Pierre Courtieu <pierre.courtieu AT gmail.com>
- To: Coq Club <coq-club AT inria.fr>
- Subject: Re: [Coq-Club] Implementing a simple program using AVL tree.
- Date: Wed, 24 Aug 2022 11:28:25 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=pierre.courtieu AT gmail.com; spf=Pass smtp.mailfrom=pierre.courtieu AT gmail.com; spf=None smtp.helo=postmaster AT mail-qk1-f176.google.com
- Ironport-data: A9a23:LEzrg68AyfohagjwTFohDrUDtXiTJUtcMsCJ2f8bNWPcYEJGY0x3m jEWCD2EPazfZWKgetxyaom3oUkA65/WzdBkSAtorHxEQiMRo6IpJ/zJdxaqZ3v6wu7rFR88s Z1GMrEsCOhuExcwcz/0auCJQUFUjP3OHvymYAL9EngZqTVMEU/Nsjo+3b9i6mJUqYLhWVnV6 Ymu+5S31GKNglaYDEpEs8pvlzs05JweiBtA1rDpTa0jUPf2zhH5PbpHTU2DByOQrrp8QoZWc 93+IISRpQs1yfuC5uSNyd4XemVSKlLb0JPnZnB+A8BOiTAazsA+PzpS2Pc0MS9qZzu1c99Zm YUWn52rGB0Tb5aVxd4/TwNKVDtgFPgTkFPHCSDXXc27ykTHdz71wKwrAhhpY8sX/eF4BWwI/ vsdQNwPRkrb1qTmnfThELMq35t9RCXoFNt3VnVI1TDUF+wrB5vEXr/W5NJF9Dg1j8FKW/3ZY qL1bBIzPUufM0YVYj/7Dro3sOmwgFTzMAFHtUnE9PIN2XDv7lV+he2F3N39I4TWH625hH2wr WXfum/9HxsyL82a0TPD83S2h+aJkzmTZW4JPLix9/ovmV7Kg2JKV0NQWly8rv20zEW5XrqzN nD45AJ//fMY9Vf6VOOsZETlmlyYpAxbQcR5RrhSBB629oLY5AOQB24hRzFHacA7uMJeedDM/ g/Y9z8OLWw/2IB5WU5x5Z/P8mzvYXl9wXsqIH5bHVFcsrEPtalq1kqXJuuPBpJZmTEcJN0d6 zWDrSx7nrZKyMBSiPv98lfAjDah4JPOS2bZBzk7vEr1sGuVh6b/P+REDGQ3C94ede51qXHc7 RA5dzC2trxmMH10vHXlrB8xNL+o/e2ZFzbXnERiGZIsnxz0pSD6J98BvGonfhk5WirhRdMPS B+D0e+2zM8DVEZGkYcqC25MI593k/a4RISNug78N4seP8EZmPC7ENFGPBbMhQgBYWAjlqYwP ZrzTCpfJSdyNEiT9xLvH711+eZzmEgWnDqPLbimkUnP+efBPBa9F+1ZWHPQNbtRxP3f8G3oH yN3bZTiJ+N3C72gPEE6MOc7cTg3EJTMLcmu+5cMJrTafVYO9aNII6a5/I7NsrdNx8x9/tokN FnnMqOB4Fag13DBNyuQbXVvNOHmUZpl/CA0OCUtORCj3H16OdSj66IWdp0We7g79bw7naQkE aVdI8jQUO5STjnn+igGacavoYFnciOtj13cMiegZg85YJM9FRfC/cXpf1e0+SRXVni3uMIyr qeOzATeRZZfFQ1uANyHOv2qxlK1+3ManbsqDUfPJ9BSfmTq8ZRre3Sh1K9pf5lUJEyalDWA1 guQDRMJnsX3otc4oIvTmKSJj4a1CO8hTEdXGm/s67zpZyTX+2yUx5AZDLSFcDXbY2PD+Ku4Y NJTwfyhYuYMm0xHstYlHrtmkfA+6t/oq+MIxwhoBi+XPVGiC7clO3rfmMcW6fMLybhetg+7H EmI/4ACa7mOPcrkFn8XJRYkPrvfj6BKwmGK4KRnOlj+6Q924KGDDRdYMS6KhXEPN7ByKo4kn bostZJE8QC5kRZ2YN+KgjoOqzaJJ30EFrwk79QUWdC1zAUszV5GbNrXDSqvuMODbNBFM08LJ D6Ihfqd2+4NmBKaK3djR2LQ2ed9hIgVvEwYxlE1IVnUyMHOgeU63UEM/Dk6JuiPIs6rDw6u1 qlX20xJyWGm+j5pgI1aXDnpFVgeWluW/Uv+z1ZPn2rcJ6VtuqohM0VlUdthPmhAm46fQtSf1 L6dwWfhFz3teakdGwMsDFV9paWLocNZr2X/dQPOIyhBN5Y/aDvhxKSpYALkbvch7dwZ3CX6m AWhwAq8hWAX+8LdT23XxrR2DYgtdS0=
- Ironport-hdrordr: A9a23:wIBzVaEYKq3/47GupLqE18eALOsnbusQ8zAXPidKOGRom62j5r mTdZEgvyMc5wxhPU3I9erwWpVoBEmslqKdgrNxAV7BZniDhILAFugLhrcKgQeBJ8SUzJ876U 4PSdkZNDQyNzRHZATBjTVQ3+xO/DBPys6Vuds=
- Ironport-phdr: A9a23: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 Rkz2FMWiQsF+zLl4lNxLV3P9nJYrQ==
- Ironport-sdr: yMG753CfkmaKhL0b4fpGzMosTfmnOBoaCwHvXjzXHolOZo9NleML3ZI5a8+r/oGmjr9pWzYuX4 x1rbM6mNM6E9aoVPqLHBwq6h1m53kfnJVD64UBO65Rzd05cL++RmybaSfFm13xp/Dv+s2JwR4D 8yrPxPBWk5TK2BI9tiuvhk8wlJBTF6RcLqc4ZRoD7iXhWOMtc3J5IuLjn5lOAVc3uW38rmnsXJ Gh4pTJXn4+SDobBAMnQ0yNf8EWR5ZUCYlw5p4uUF3inCypZuw3J1I7kiJyayi0v/0N+xVbyM/B WAeSZB4j7V0s99Sq4TVEgK5G
Hi,
Actually if T has inner module. In particular the Raw module, where
you can find the remove_min function, together with some properties
about it.
Import MSets ZArith Coq.ZArith.Int Psatz.
Module M := MSetAVL.Make Z_as_OT.
Print M.Raw.
Print M.Raw.remove_min.
(* More facts about MSets:*)
Module MFacts := MSetFacts.Facts(M).
You can't perform an induction or destruct directly on trees, this is
on purpose: to prevent depending on the current implementation of AVL
and be robust against further changes of the internal definitions.
Only the MSet.Interface and MSet.Facts are unlikely to change
significantly.
For desperate cases you can perform an induction on the list of
elements given by M.elements, but I think the whole idea is that you
shouldn't need it.
BUT, this is probably not what you want to do anyways, as Mukesh
suggested iIf you are interested by remove_min, you are reasoning
about *ordered* sets instead of sets, which suggests to look for the
corresponding functors: MSetInterface.Ops and MSetAVL.Ops. And if you
are interested in AVLs specifically you may have a look at
MSetGenTree.v [3].
[1] https://coq.inria.fr/library/Coq.MSets.MSetInterface.html#HasOrdOps
[2] https://coq.inria.fr/stdlib/Coq.MSets.MSetAVL.html#Ops
[3] https://coq.inria.fr/library/Coq.MSets.MSetGenTree.html#Ops
Best
Pierre
Le mer. 24 août 2022 à 09:56, mukesh tiwari
<mukeshtiwari.iiitm AT gmail.com> a écrit :
>
> Hi Suneel,
>
> I just quickly looked at the source code [1] and wrote a simple code:
>
>
> Require Import MSets
> ZArith Coq.ZArith.Int FunInd
> Psatz.
>
>
> Module M := MSetAVL.Ops Int.Z_as_Int Z_as_OT.
> Check M.remove_min.
> (*
> M.remove_min
> : M.tree -> M.elt -> M.t -> M.t * M.elt
> *)
>
> Unfortunately, I can't do induction on 't' because the induction
> principle is unset [2],
> but you can still do functional programming using the 'refine' tactic,
> so I believe it should
> not be a problem. I believe the challenge would to find the concrete
> instance of
> modules, e.g., in this case 'Int.Z_as_Int' and 'Z_as_OT' for instantiation,
> but
> if you search you can get it, otherwise you can alway ask here.
>
>
> Lemma tree_proof : forall (t : M.tree), (0 <= M.height t)%Z.
> Proof.
> refine(
> fix fn t {struct t} :=
> match t with
> | M.Leaf => _
> | M.Node h _ _ _ => _
> end).
> Admitted.
>
>
> Best,
> Mukesh
>
> [1] https://github.com/coq/coq/blob/master/theories/MSets/MSetAVL.v
> [2] https://github.com/coq/coq/blob/master/theories/MSets/MSetAVL.v#L42
>
> On Tue, Aug 23, 2022 at 9:03 PM Suneel Sarswat <suneel.sarswat AT gmail.com>
> wrote:
> >
> > Dear friends,
> > I am new to the FSet or MSet library of Coq. I have got a simple task of
> > implementing a program (current version involving lists) using trees.
> > My elements are of record type with lexicographic order. I am able to
> > define (thanks to xavier leroy) ordertype X using Module X <: OrderedType
> > and can initiate Module T:= FSetAVL.Make(OrderedB).
> > I could do simple things like creating a tree using T.add but I could
> > understand how to use many other functions. For example, T.remove_min
> > (not recognized!). Also, how to do case (destruct) on trees similar to
> > lists.
> > I am sorry if my question is elementary but due to lack of documents/use
> > cases I am finding it difficult to proceed. Also, I have a deadline fast
> > approaching.
> > Please suggest some documentation or some use cases for quick help.
> > Many thanks,
> > Suneel
> >
> >
- [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/23/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., mukesh tiwari, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Pierre Courtieu, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Pierre Courtieu, 08/25/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/26/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Pierre Courtieu, 08/25/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., mukesh tiwari, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Suneel Sarswat, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., mukesh tiwari, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., Pierre Courtieu, 08/24/2022
- Re: [Coq-Club] Implementing a simple program using AVL tree., mukesh tiwari, 08/24/2022
Archive powered by MHonArc 2.6.19+.