coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Suneel Sarswat <suneel.sarswat AT gmail.com>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Implementing a simple program using AVL tree.
- Date: Wed, 24 Aug 2022 17:34:00 +0530
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=suneel.sarswat AT gmail.com; spf=Pass smtp.mailfrom=suneel.sarswat AT gmail.com; spf=None smtp.helo=postmaster AT mail-ed1-f47.google.com
- Ironport-data: A9a23:RGNv9q6iMz8bbY4AA63C5AxRtN/BchMFZxGqfqrLsTDasY5as4F+v mNLWz2FPKrfZmf3L4xyYY6//EgF75SDzINmHQto+XhjZn8b8sCt6faxfh6hZXvKRiHgZBs6t JtGMoGowOQcFCK0SsKFa+C5xZVE/fjUAOK6UoYoAwgpLeNeYH5JZSlLxqho2eaEvfDjW1nX4 YOo/5WGULOY82cc3lw8u/rrRCxH56yaVAMw5jTSstgW1LN2vyB94KM3fcldHVOgKmVnNrLSq 9L48V2M1jixEyHBpT+Suu2TnkUiGtY+NOUV45Zcc/DKbhNq/kTe3kunXRYRQR8/ttmHozx+4 PwT7o6XCgonB6rdnc1CUjt4KR9FH5QTrdcrIVDn2SCS50jPcn+pzvk3SU9qYssX/eF4BWwI/ vsdQNwPRkrb1qTmnfThErkq2ptLwMrDZOvzvll70DfUAPJgWpnZWLrD+fdX2T4xgoZFGvO2i 88xM2M+PUubOUwn1lE/Kq0emPf4lkjGYwJ8gX28r4g60jWU5VkkuFTqGIONJobiqd9utk2fv yfN+3nzKgoLMcSWjzuD6HOlwOHV9R4XQ6oXHby8s/Nm2RidmjNVBxoRWl+25/K+jyZSRu6zN WQ9pHE8ius/+nWsX9zUAByagES6hTwlDo84//IB1CmBza/d4gC8D2cCTyJcZNFOiCPQbWx7v rNut4O5bQGDoIF5WlrGqejJ9WLa1Tw9aD5dNXVdHGPp9vG6+Nlr5i8jWOqPB0JcszEYMTT5w jTPoSRnwrtP0ogE0KK0+V2BiDWpznQocuLXzlSONo5GxlkhDGJAW2BOwQaHhRqnBNjCJmRtR FBex6CjABkmVPlhbhClTuQXB62O7P2YKjDailMHN8B/qW33pC//JtkKvmEWyKJV3iAsKW+Bj Kj76VM52XOvFCbCgVJfON/vVZx7ncAM6/y8B6CJN7KinaSdhCfepH00DaJh92/ql0conMkC1 WSzIK6R4YIhIf0/llKeHr9DuZdyn3xW7T6NGPjTkkv/uZLAPiL9YeleazOmMLtphJ5oVS2Pr L6zwePRm0sBOAA/CwGLmbMuwacidyFgWsur8ZQOL4Zu4GNOQQkcNhMY+pt5E6QNokifvr2gE qiVVhAKxVzhq2fALAnWOHlvZKm+D5l6pHM/eycrOA/wiXQkZI+u6oYZdoc2LeF3rrw9kaYsQ qlXYdiED9ROVi/DpGYQYJz7m4poK0amiAeICCy6bWVtZJVnXQHIpoTpc1K3pikDBya6r+Ukp Lik2l+JSJYPXVUwA8PfafbpxFS05CBPlOV3VkrOA99SZES8qNgwe3Kt1qc6epheJw/Cyz2W0 xetLS0Z/eSd8ZUo9NTphLyfq9j7HuZ7GH1cFTaJ4LuzMx7c4TP/k4JNVeC/fQfdWnnxz6Osa LgH1Pr7KvAGwA9HvocgQbZmyaUyu4nmq7NAlF82GXzKaxGmBuolLCXZm8ZIsaJJy/lSvg7vA hCD/dxTOLOoPsL5EQ5OeFB0MLzbjfxEyCPP6fkVIVnh4HEl9rSwUXJNY0uGhhtbIeYnK4gi2 +og5ZAbslTtlhowP9+apSlI7GDQfGcYWqAqu81IGoPtkQZ3mFhObYaGUX3z6ZCLLthAawwkf mDSi63FiLBRgEHFdiNrR3TK2ONcg7UIuQxLnABefQXXwoKdi69lxgBV/BQ2Uh9RkEdN3dVzD Xc3ZUd7EqODomVzj89ZUmHxRQwYXE+F+lb8wkcinXHCSxX6TXTEKWAwNI5hJqzCH76wqtSaw F2Z9IoheTPjfcW00ydrHEA59LrsStt+8gCEk8eidyhA81/WfhK96pJCp0JRw/ckPS/1rELCr Ohuuu13bMUX8AYO9rYjBdDyOas4EXi5ya8rfR2l1KwMFGDYPjq13FBi7qx3ltxlf5T3zKNzN yCiyg+jmfhzOOZiYw333ZIxHoI=
- Ironport-hdrordr: A9a23:yHnPz67vtEBNklZMpgPXwPHXdLJyesId70hD6qkRc20tTiX8ra qTdZsgpHrJYVoqKRMdcJW7Scq9qBDnlKKdg7NhWYtKNTOO0ACVxcNZjbcKqAeQfBEWmNQts5 uIsJITNDQzNzVHZArBjzVQ2uxP/OW6
- Ironport-phdr: A9a23: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
- Ironport-sdr: rvShvGUvFOjHrLOVluALbPmkc+kazOuK7Kc8c+0xpdVRnX8hPxgfFEyLTFoqfNDdP0TQx3x4IA KkTYVQdb7golQR0ie/ANw6fUFT9fz81amzD6oDyZ+s/r3OsfIxDwIEyJFS7Rbwrl8L2F5Q9YyC l4JDSNDrkc7EACTpWSIYJ4SK5C0o5EOtp1yTwj5FVkakwF7avKpjUE8qpUzaWj7QVG/t+F00ex kAiRlO3AO5m5B+TTj9bEiFDUz8yJykjW7Qg5mZHHz/ZubMilds02f/KMZFxacUDh9EqKuqXRyp Cz5SqfvhptSWuHJRORDjMN3d
Dear Pierre,
My requirements are any tree data structure so that I can write efficient algorithms which are otherwise inefficient on lists.
My elements are records with lexicographic order. The operations I am going to perform are insert, remove_min/max, delete.
In the case of a list, min/max extraction takes O(1) time but delete and insert takes O(n). But in a tree data structure all
these can be done in O(logn) time. Instead of implementing a tree for my specific purpose, I would like to try the already
built library so that my proof obligations are less. Also, use of the existing library makes more sense than inventing everything yourself.
Hence, I was looking for some documents or use case examples to save time.
Regards,
Suneel
On Wed, Aug 24, 2022 at 2:59 PM Pierre Courtieu <pierre.courtieu AT gmail.com> wrote:
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+.