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 AT inria.fr
  • Subject: Re: [Coq-Club] Implementing a simple program using AVL tree.
  • Date: Thu, 25 Aug 2022 00:31:18 +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-f49.google.com
  • Ironport-data: A9a23:Fnw2QaCQ6X+MahVW/wrlw5YqxClBgxIJ4kV8jS/XYbTApD531WAGx 2IaXj2Db/iMZzCnKN11PN7g8kgBsJHTytE2OVdlrnsFo1Bi+ZOUX4zBRqvTF3rPdZObFBoPA +E2MISowBUcFyeEzvuVGuG96yE6j8lkf5KkYAL+EnkZqTRMFWFw0nqPp8Zj2tQy2YjjX1vX0 T/Pi5S31GGNi2Yc3l08sPrrRCNH5JwebxtF1rCWTakjUG72zxH5PrpHTU2CByeQrr1vIwKPb 72rIIdVUY/u10xF5tuNyt4Xe6CRK1LYFVDmZnF+A8BOjvXez8A/+v5TCRYSVatYoyuugfovl vxGjM2pClkDN5bHo8E8XAYNRkmSPYUekFPGCX22sMjWwkGfNnWwkrNhC0Y5OYBe8eFyaY1M3 aZAeXZdM1bZ37LwnOPTpupE3qzPKOHwIYUSt3Um1jjDFukvXbjMRqzL4ZlT2zJYasVmR6yGP ZpAOGIHgBLoTUFUBncvDY8CuPbxlHz6IyV8pXu3nP9ii4TU5FUpjOKF3MDuUteNXIBemluSj nnX+nzwRBAcLt2WjzSfmk9AncfKlCL/HY8eTfi2qq8sj1qUyWgeThYRUDNXvMVVlGagfMx1d RI98RN/tOts3kWQReLYfhKn9SvsUgEnZ/JcFOgz6Qeow6XS4hqECmVsctKnQIx33CPRbWx6v mJlj+8FFhQ07+LIESP1GqO86GLtaXJMfAfucAddFVNdi+QPtr3fmf4mczqOOKu8j9mwFD2ph j7W/W4xgLIcicNN3KK+lbwmv95OjsmQJuLWzl+PNo5A0u+fTND5D2BPwQaAhcus1K7DEjG8U IEswqByFtwmA5CXjzCqS+4QBryv7PvtGGSC3wc1QMh9rG33pS7LkWVsDNdWdBcB3iEsKW+BX aMvkV45CGJ7Zyb0M/cmM+pd9exznPi9TLwJqcw4nvIXOsQrHON21C5pYkGU0gjQfLsEwMkC1 WOgWZ/0Vx4yUPw5pBLvHrt1+eJ1m0gWmDyLLbillUjP+eTFPxa9F+xVWGZim8hjs8toVi2Oo 4gBXyZLoj0DONDDjt7/odNKfQFVcyRT6FKfg5U/S9Nv6zFOQAkJY8I9C5t7E2C8t6gKxOrO4 F+nXUpUlAj2iXHdeFeFb3libPXkWpMm9SA3OiklPFCJ3Xk/YNb3vP1PKcdvJbR3pvZ+yfNUT uUef5rSD/lKTAPB8WtPYJT4qrtkaxn21xmFODCoYWRkcpM5H17J99bocxHB7i4LCibr58Iyr 6fxhAzeSJsHAQ9lCZ+OOv6oylqwu1kbmf5zDxOYeIkNJB20/dEzeSLrj/IxL8UdEjn5x2OXh 1SMHBMVhejRuItqotTEgKazqY32QeZzG0xtGXaCseS7OCzcyWqUwYFaVdGOcz2ABnj//7+vZ LkMwvzxbK8HkVJNv9YuGrpn1/hltd7mprsfwwg9WXuXPhKkDbRvJnTA1s5K7/UfyrhcsAqwe 0SO5tgKZunTaZ29SAYcdFg/c+CO9fAIgT2Ov/47F0P3uX1s972dXEQOYhSB1H5HIL1uPN93y OstopRNuQm2ix5vP9rfyy4IpiKDKXsPV6hhvZYfWde5hg0uw1BEQJrdFi6mv83VOosUahEnc m2Oma7Pp7VA3U6eIXA9In7AgLhGjpMUtREWkVIPKjxlQDYeaiPbAfGQzdg2cuiR5hBO0uY2N 2QyckMpdOOB+DBngMUFVGepc+2E6Nt15WSpo2blVkWAJ6VraoAJBGI4MOeJukse9gqwuxBFq aqAxj+NvSnCJanMM+hbZaKhg/PmRN11sAbFnahL2ihD84YSOVLYv0NlWYbER9YLzy/8aI0ra NSGJNpNVJA=
  • Ironport-hdrordr: A9a23:mS+FI6AQBnd5HKflHemV55DYdb4zR+YMi2TDtnoBMCC9F/bzqy nApoV/6faZskdyZJhko6HiBEDiexLhHPxOkO0s1N6ZNWGMhILrFuFfBODZslrd8kPFh4hgPG RbH5SWyuecMbG3t6nHCcCDfeod/A==
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: q4U6/BPdjgNWfu957BDT1PYUVY9YgP3TynY4yLmv7V9ggEDG1afNSk5OOlOeEpIGpS2/45jV7L 8LN7UsxI0p/+QUUfm6+FNXBcAD2xnLebi9LdkvTogXUrdzU+2W9zP951TvgX2ZsJV3qBOmcq35 x/V1msL7r9DiIXrWY9x5RKoN5NdMb+sOuBpinBWqrJqmUUnLxwIuaQfjJAkK0Ac1UccmKvdtD/ qASdgPdCXuz2wPeFRa02cRj7q89NcXdEUd29LppNcMmsMONvxRvP2w4T1+3DnRh2EawPZ2lRFu uE782/9bfIK8QRFxtHa5jXC5

My elements are of record type over nat and a lexicographic order over these elements using a few fields of the record. For this reason, I defined order type OrderTypeB.
Now for the Ordertype of MSetAVL the signature component compare (over bool) is different from that of FSetAVL (Prop). This is confusing for me at this time.
Also, for the height, isn't it nat is more natural choice than Int or Z? Is it to do with Extraction?
Thanks,
-Suneel



On Wed, Aug 24, 2022 at 7:05 PM 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