Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Implementing a simple program using AVL tree.

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Implementing a simple program using AVL tree.


Chronological Thread 
  • From: Suneel Sarswat <suneel.sarswat 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 20:06:22 +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-ej1-f43.google.com
  • Ironport-data: A9a23:UIuiGqsIwANl2ydojAGzFqRlHOfnVHtYMUV32f8akzHdYApBsoF/q tZmKWHTM/qKYWXzL9t1bd6w9hwGuZDXz4NjGVBq+X1hRi1DgMeUXt7xwmXYb3rDdJWbJK5Ex 5xDMYeYdJhcolv0/ErF3m3J9CEkvU2wbuOgTraCYEidfCc8IMsboUsLd9UR38g52rBVPyvX4 Ymo+52FZAf8s9JJGjt8B5yr+EsHUMva42twUmwWPZina3eD/5W9JMt3yZCZdxMUcKEMdgKJb 7qrIIWCw4/s10xF5uVJPVrMWhZirrb6ZWBig5fNMkSoqkAqSicais7XOBeAAKtao23hojx/9 DlCnaW0YDYwNf3upORDA15dEAcgFId6+LCSdBBTseTLp6HHW37lwvErAUNveINEoaB4BmZB8 fFeIzcIBvyBr7jukfTrF68235RlcJKD0IA34hmMyRnCEPArTJSFWKzQ/sBRwB8/g8lPGbDVY M9xhT9HNk6YOkQSYQp/5JQWwLerr0HDIzNk9xG0lZBp4W3Y1yVh6e24WDbSUoXSGZ89clyjj mnB5iHyBgwQHMeOzCKMtHOqnO7G2y3hML/+D5W9//9uxVCRnykdVEZQWly8rv20zEW5XrqzN nD45AIXqYED7Uf7bOX9AU3/pX2i4Dc2Z9pfRrhSBB629oLY5AOQB24hRzFHacA7uMJeedDM/ g/Y9z8OLWw/2IB5WU5x5Z/P8mzvYXl9wXsqIH5bHVFcsrEPtalq1kqXJuuPBpJZmTEcJN0d6 zWDrSx7irdKyMBXjOO0+lfIhz/qrZ/MJuLU2uk1djL0hu+aTNT9D2BN1bQ9xagdRGp+Zgfc1 EXoY+DEsIgz4WilzURhutklErCz/OqiOzbBm1NpFJRJ323zpSf5ItEMu2gkehcB3iM4ldnBM B+7VeR5tM87AZdWRfIfj3+ZUJl0k/CxRbwJqNiNP4oTO/CdizNrDAk3PRLKt4wcuEcrlq47N P+mnTWEXB4n5VBc5GPuHY81iOd1rghnnD+7bc2lknyPjOXGDFbLE+ttGAXVNYgRsvjUyDg5B v4FaKNmPT0EALOgCsQWmKZPRW03wY8TWcin+pMMK7PcfmKL2ggJUpfs/F/oQKQ994w9qwsC1 ijVtpZwxAWtiHvZBx+Nb3w/OrrjUYwu/30+NC0oe12v3iF7M4qo6a4ecboxfKUmpLQzl64qE 6FddpXSGOlLRxTG5y8ZMsvwoYlkQxKh2lCDMi+jVz4gcsMyXAfO4NLlIlDi+XBWXCq6vMczu ZO60QbfTcZRTghuFpeEZ/emzlf3tn8YwbogU0zNK9hVWUPt7Ik6c3yr3qFre5kBcEyRyCGb2 gCaBQYjidPM+4JlosPUga2krpuyF7QsE0dfGV7d5+nkOCTf+F2l3tYcAuuFeDbqVFT09r+nU uNbwqyuK/YAhltL79NxHrs3n6Iz49zj++1Twgh+Ri6Zal2qDvZtICDD05UU8KJKwbBdtE29X UfWootWPrCAOcXEFl8NJVp6Mr7Si6lMwjSCv+4oJEja5TNs+ObVW0tlORTR2jdWK6F4Md94z Op96tQa7Rez1kgjPtqc1HsG8m2NKjkNUfxiuM1BRoDsjQUvxxdJZpmFUn3655SGatNtNEg2I 2/L2PCT2ewEnkeSIWAuEXXt3PZGgchcsh59ylJfdU+CncDIh6Nq0RBcmdjtot+5EvmaPyNP1 mlX24ldIKyP+3JlhpEGUTz3XQ5GAxKd9wr6zF5heKg1iaW3fjSlEYH/Eb/lEIMlH6Z0cT1S/ bXew2HgOdovVN+kxTM8ACaJtNS6JeGcNWT+dASPEMGMHp18aj3g6kNriazktDO/af4MaIb7S SWGMQq+hWAX9cLdnkHjN7Sn6A==
  • Ironport-hdrordr: A9a23:4t+Daa/BL5oLaw83MQtuk+DhI+orL9Y04lQ7vn2ZKCYlC/Bw8v rFoB11726QtN98YgBDpTnEAtjifZq+z/9ICOsqTNOftWDd0QPCEGgh1+vfKlbbakrDH4BmpM FdmmtFZOEYz2IWsS832maF+h8bruW6zA==
  • Ironport-phdr: A9a23:VWUCZB2ZOAsrXTbxsmDOcQ4yDhhOgF0UFjAc5pdvsb9SaKPrp82kY BaEo68y1RSWDc3y0LFts6LuqafuWGgNs96qkUspV9hybSIDktgchAc6AcSIWgXRJf/uaDEmT owZDAc2t360PlJIF8ngelbcvmO97SIIGhX4KAF5Ovn5FpTdgsip2e2+4YPfbgdViDayY75/L wi9oBnMuMURnYZsMLs6xAHTontPdeRWxGdoKkyWkh3h+Mq+/4Nt/jpJtf45+MFOTav1f6IjT bxFFzsmKHw65NfqtRbYUwSC4GYXX3gMnRpJBwjF6wz6Xov0vyDnuOdxxDWWMMvrRr0yRD+s7 bpkSAXwhSgIOT428mHZhMJzgqxGvhyuuwdyzJTIbIyPLvdyYr/RcNEcSGFcXshRTStBAoakY oUSEuoBO/hXoJf5p1ATsBWxHxOsBPjhyzBSmn/9wKo30/88EQHAwgMvAdYOvG7PrNrvLqcSS u60w7PUzTjYYPNW3C3y6InMchw7vf6MWrdwfNPXxEIyGAzLkk+eppb5PzOJyOsNqW6b4vJ+W O+gl2IqtR19ryaxyskji4TFmIAYx1LL+Ch7z4g4J9y1RVJlbNOkDJddtCOXO5d2TM88TWxlu ic3x7kYtJC1eiUB1Zopxxnaa/OdcoiI5AruVeeLLjdihXJlZLK/iwyz8Uim1u3wTsa00FdWr ipFj9nDrWoB2ADU6siCTPZ240Sv2S6X2gzN9u1JJVo4mKnbJpI73LI8i5kevV7MEyL4nkj9k bWYeV8++uey7uTqerXmqYGYN49zkgz+N74hms27AeghLAcOXXWX9f2y1LDs80D1WrpKjvoxk qnWtJDVO94XqbK+Aw9Qyooj6hC/ACm60NkAg3ULMFZIdAiEgoXpIV3CPu30APSlj1mjnjpn3 /XGMafgApXJIHjDirDhfbNl5k5H1Qozy85Q6IxQCr0bO/L8QFXxtMfWDxAjLwy52OnnCNBn2 YMfXWKDGLOWMKTXsVOQ4OIgOPGDZJUJtzblN/gl+/nugGcklVMFZ6mmwYMXaGykHvRhO0iWf X3sgs4YHWgWugo+UfflhUaZUT9TYnayR7gz6is6CIKgF4fDR5qijKaP3CehTdVqYTVNDUnJG nP1fc3QUPAVLSmWP8VJkzoeVLHnRZV3hj+0swqv8KdhI+fQshYRr4n83cQ9s/bOkxw/8XpvB t6GzGiRZ25xl2IMATQx2fYs8gRG1l6f3P0g0LRjHttJ6qYROu9bHZvVzughTsv3RhqEZdCRD lCvXtShBzg1CNM32d4HJUhnSJ25lh6W+S2sDvcOkqCTQoQu+/fHwn78KsI70H/cz7Yok3EpR 8JOMSutgassvxPLCdvxml6C372vabxa2SfM8GmZym/bp1xeXQN0F77MR2sAb1f+otHw50eER LirWvw8KgUU78mEJ+NRb8Hxy1VLQPC2INPFf2e4gHu9Hz6Nz7KIKYfoIiATgH6bB08DnAQeu 32BMGDSHw+HpGTTRHxrHFPrOAb39PVm7Wi8Vgkyxh2LaEto0/y0/AQUjLqSUaFb2LVMoyonp zhueTT1l9vLF9qNoRZgd6RAcJs85llAz2fQqw16ONSpMaljglcUdwk/sVnp0l17DYBJkM5iq 31PrkI6Mr+e3V5FMSiRx4vvM6H/JWz7/RTpYKnTmxnf3NuQ5qYT+aEgsVyw2WPhXkEm8nhhz 5xUyy7GvsSMXFdUC8uhFBpspH0Y7/nAbyIw5p3ZzyhpOKiw6XrZ3s4xQfAi0lCmdsteN6WNE EnzFdcbDo6gMr9P+RDhYxQaMeRV7KNxMdmhcq7Mw7OtMetk2imvl39Y6ZxV3UeF9i46QenNl cVgobnQzk6cWjHwgU30+Nvqn41JYXcJF3Ck1iH4LIFUb6x2O40MDC39Rq//jsU7jJnrVXlC8 VelDF5Tw86ldy2ZaFnl1BFR30AayZC+sROx1Cc80zQgr67EmTfL3/ynbx0ffGhCWGhli17oZ 4myldETGkayPUAlkx6s5ECywKY+xuw3NHTVTEpMOTP/NXp9W7eYub+LYsoJ45Qt+SlaS+WzZ 1mGR6W1+UNLlXO+WTEHlHZnLHmjofCb11RihXiYLWpvoXaRYsx2yRrFpZTdSfNXwjsaVXx9g DjTCEK7Oorh9tGVmpHf9+GmAjj5B9sDLG+xlNPG6HDogA8iSQeylP2yhND9RA0z0CugksJvS T2NtxHkJI/iy6W9N+tjOEhuHl71rcRgSeQc2sM9go8d3X8Ci9Cb530CxC3oLNNW1Ka4d3MXX iEC3/ba5QHk3AtoKXfDlOebHj2Nh9BsYdW3eDZcwT874s1OTryd9qdblDddrV+xrAaXav941 GR4q7Nm+DsRhOcHvxAoxyOWD+UJHEVWCifrkgyB89G0qKgELHbqa7W701By2MywFLzX6B8JQ 273I91xeE04ptU6Kl/H12f/r53paMWFJ8xGrQWayl/Bl7QHc893z6tSw3A7ZiSl+id5g+8j0 U4wgdfg59PBcjs1uvr+W089VHW9ZttPqG+zy/8GxIDOmdjoRM0pGy1XDsW2C6j0QXRC7bK/c FzWWDwk9iXEQ/yGQUnGuR0g9zWWQ/XJfzmWPCVLkokkHUPAYhQZ2EdNAn07hsJrT1j6gpW+L wEpoGhWvAewqwMQmLs3bF+mAzuZ/EHwLW5qLfrXZBtOslMYvxaTYZHYt7gjWXkfp8LprRTRe DbCOUIVXSdQCxbCXxe6b/Gv/YWSqbHGQLDlfr2VO/PW7rUPMpXAjYSm1o8sl9qVHuOIOHQqT /gy204YGGt8B9ycgDIXDSoeiyPKacef4ha64Cx+6M6lorztX0r06I2DBqE3U50n8g2qgaqFK ++bhTpoYTde2JQWwHbUyb8ZlFcMgiBqfjOpHPwOrynIBK7Xn6ZWCVYcZUYRfINQ6Lkg2wBWJ cPBotb817o9g/xsTlkZDhruncamYcFMKGa4dRvGCEuNKLWaNGjLzsXwMsbeAfVbiORZsQH1u C7OSReyeGTe0WOwB1bzarIp7mnTJhFVtYCjfww4DGHiSImjcRinKJpsiiVwx7Qoh3TMPGpaM D5mckoLoKfDiEEQyvh5BWFF6WJoaOeenCPMpfLFLJsbtb1wCz5viOtGyHs/wrpRqipDQbYm/ Uma5s4ruFygnuSVn3B/VwFSrz9QmI+RlUBrOKGc+5sZHHiYp1QC6mKfDxlMrNxgQI6K2egY2 p3Ek6T9Ly1H+tTf8J4HBsTaH8mANWIoLRvjHDO85OQtQjuiNGWZjEtYwqj6Hpi9oZ0zq5yqk 50LGOczvL0dE/obDgFoHoVHLsssGDwjlrGfgYgD4n/s9HHs
  • Ironport-sdr: CHhYnaSCa+ttjtQazBsDOKXKhSsFmW51QxLfBQw+o5JZoBm4N6OW2VoqRW45wzrLrOljxkgliI LeRfkKjfNAsB8fTDhENEsUMVFQgeigH4P6WXCGzNunIAY5sP+T5mf/6T8REx0Avj/ZekSQALbs jK4j3Jhg6Y2NkflkZtxpq0W8Z9g9j6KSoCcy5CD8227WeU6Hmb76gBur1IS4IMLJbTvFLjvovH uyz1glBsL28XW8cD0FnNFqBEuV6+XsP7PoKVC/21M9PFxDo/Wz7XxTiRxm5oh+aOxru+9dmhKs 461MYao3gcyaYvbyNo6X9wEX

Thank you Mukesh,
Lets wait for more suggestions and meantime let me try this.
-Suneel 

On Wed, 24 Aug 2022, 19:05 mukesh tiwari, <mukeshtiwari.iiitm AT gmail.com> wrote:
Hi Suneel, 

My suggestion would be to stick to MSetAVL because I can see, “This is just a compatibility layer, the real implementation is now in MSetAVL”, in the FSetAVL.v file but I will wait for someone more expert  to comment on this. 

I faced a similar problem as yours but it went away when I imported Orders  before OrderEx because it has the definition of eq_equiv. This works but unfortunately it does not have remove_max.


Require Import MSets 
  ZArith Coq.ZArith.Int FunInd
  Psatz Orders OrdersEx.


Module M := MSetAVL.Ops Int.Z_as_Int Z_as_OT.
(* 
You can contruct an OrderedType lexicographic product from 
two OrderedType
*)
Module W := PairOrderedType Z_as_OT Z_as_OT.
Module V := MSetAVL.Ops Int.Z_as_Int W.

Check V.remove_min.
Check V.add.
Check V.remove.
(* Unfortunately, it does not have remove_max*)
Check V.remove_max.

Best,
Mukesh 

On Wed, 24 Aug 2022 at 12:51, Suneel Sarswat <suneel.sarswat AT gmail.com> wrote:
Dear Mukesh,
Thanks for this information. What I have understood is that some of the functions are defined for some specific modules only.
It seems even the OrderType is differently specified for different modules. For example, the equivalence requirement on the order type in MSetAVL (eq_equiv) is different from the same in FSetAVL.

Require Import MSets ZArith Coq.ZArith.Int Psatz FSets FSetAVL.
From Coq Require Import OrderedTypeEx.

Module T := MSetAVL.Make OrderTypeB.
(*
The field eq_equiv is missing in Test.OrderTypeB.
*)
but Module T := FSetAVL.Make(OrderTypeB). works for a lexicographical order OrderTypeB defined on elements of type record.

Regards,
Suneel 




On Wed, Aug 24, 2022 at 1:27 PM mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:
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
>
>



Archive powered by MHonArc 2.6.19+.

Top of Page