Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Red-Black tree and OrderedType on records

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Red-Black tree and OrderedType on records


Chronological Thread 
  • From: Li-yao Xia <lysxia AT gmail.com>
  • To: coq-club AT inria.fr, Suneel Sarswat <suneel.sarswat AT gmail.com>
  • Subject: Re: [Coq-Club] Red-Black tree and OrderedType on records
  • Date: Mon, 12 Sep 2022 13:03:04 +0100
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=lysxia AT gmail.com; spf=Pass smtp.mailfrom=lysxia AT gmail.com; spf=None smtp.helo=postmaster AT mail-wr1-f47.google.com
  • Ironport-data: A9a23:Fo5jlqL/FPrYFSqRFE+Ry5MlxSXFcZb7ZxGr2PjKsXjdYENS3jMFz jcaUW3TPPqMamXxKI8lYY2z9k5XuJPRx9IySlMd+CA2RRqmi+KVXIXDdh+Y0wC6d5CYEho/t 63yTvGacajYm1eF/k/F3oDJ9CU6jefSLlbFILas1hpZHGeIcw98z0M48wIFqtQw24LhUlrX4 YqaT/D3YTdJ5RYkagr41IrY8HuDjNyq0N/PlgFWiVhj5TcyplFNZH4tDfnZw0jQHuG4KtWHq 9Prl9lVyI92EyAFUbtJmp6jGqEDryW70QKm0hK6UID66vROS7BbPqsTbJIhhUlrZzqhkvRd6 sxJnJGKZzgbB/LyhuAMDAsIHHQrVUFG0OevzXmXtMWSywjZaSKpzakxSk4xOoIc96B8BmQmG f4wcmhcKEDewbjsmfTnFYGAhex7RCXvFIcOoWFhxBnWCP8nRdbIRKCiCdpwhmxs2JEfRa+2i 8wxTTRTTkvLbCN0AXQ0EYgYo8OEinv/bGgNwL6SjfNvvzK7IBZK+LPqKZ/efsGAbd5Em16R4 GPA5WXwRB8AXOFz0hKA+3Oow/DVxGb1BN1UG7q/+fpnxlaUwwT/FSH6S3O2hdWbk0qXVuhxF H4tpRQwqblt5hykG4yVswKDnFaIuRsVWtx1GuI86R2Qxqe83+p/LjhUJtKmQIx23PLaVQDGx XfSwIy0XW0HXKm9DCPCpu3N/FteLABMdTdaDRLoWzfp9DUKnW3ephfGT9ImD7Tsy9OpRnf/x DeFqCV4jLIW5SLq60lZ1QGY695PjsKRJuLQ2ukxdjz/hu+eTND+D7FEEXCBsZ59wH+xFzFtR kQslcmE9/wpBpqQjiGLS+hlNOj3uazUamSE2gQyQcRJG9GRF5iLLdA4DNZWdBcBDyr4UWKBj LL74l4IvccObBNGk4cuO93oUazGMpQM5fy8DqyOBja/Spd2cwCD8UlTib24jgjQfLwXufhnY /+zKJ7yZV5DUPgP5GfoGo81jOBzrghgnz+7bc6glHyPj+HODEN5vJ9fbzNimMhivP3ayOgUm v4DX/a3J+J3DrKnOnCLr9JKRb3IRFBiba3LRwVsXrbrCmJb9KsJUZc9GJstJN5ombp7jODN8 i3vU0NU0gutinjOKAHMYXdmMeu9UZF6pHM9HCotIVf4gyh5MdjztP8SJ8ktYL0q1O1/1vorH fQIfsO3BP4QGDnK/jIqa4bw8d55fxOxiAPSZCeoOWBtf5NpSwHT1MXjew/jqHsHAiat5Jkxp rSh0kXQRp9aH1ZuC8PfafSOyVKtvChFyLgiAReQetQKIRfi6olnLSD1n8QbGcBUJEWR3Cae2 iaXHQwc+rvAroozx9/D2vKJooKvJO1hRxYIEmTe64G2AinU5G+Ux4FNDbSTdjfHWWKooaiva LkHz/z4N/Fbzl9Gv5AmSORuxKM6osT1/vpUklsiE3LMYFCmTLhnJyDej8VIs6RMwJ5fuBe3C h3ToIgEYe3RNZO3CkMVKSokcv+HiaMelA7U4KlnO079/iJ2oOeKXBkAJRWKkyABfrJ5PJl/m rUksc8SrhOl018kbonAgSdT+GCBaHcHVvx/5J0dBYbqjCsty01DMcOAUH6ouMnXZoUeKFQuL x+VmLHG2+ZWyH3EfidhDnPKx+dc2ckDtR0iIIXu/LhVdgcpR8Pb3SG9NRwyRwVRiwpdiqd9Z jctOEpyKqGDuTxvgaCvmoxq9x5pXHWkFo7ZkjPlV1E1i2GnU2XMKCs2PuPlEIUx7TdHZjYCl F2H4D+NbNspFf0dGgM9XEdkr7roStkZGsguXiy4N5ztIqTWqgYJTkNjiaTkZvcn7Q4MaJX7m NRX
  • Ironport-hdrordr: A9a23:jVkPkqyxCSLRJZBzwcVzKrPwPr1zdoMgy1knxilNoHtuHvBw9v rCoB1173DJYVoqNk3I+urrBEDjewK+yXcd2+B4VotKNzOHhILHFuBfBMfZsljd832XzJ8+6Z td
  • Ironport-phdr: A9a23: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 uU=
  • Ironport-sdr: sTrw4+bf2ar8TJFZl/gp8BPbafY++1H7GhRHrzak5fgZ2GKAl0ZlhAzzpcFsGRj8EfJ1YYMg3I aweI/ZILnjT1iIofP6gujzMf21F2EhBQ3RhePQ+9zR1euy88CH72CHfnPq6Qj/WJ3unkimxS8g rAB2AT5huYSDA2qz8/zZEtDnOK3eRwH7vW4n8QypwWrf8U/Ler4xjXddjb/ydYHRm0ONIJbfXr MmImxOaopW7cniRfp28moR0q0v4dz7hVWGJbotlz3GE/uECWjA44ch07GY4+kQ4MqLHFGwk5Ib 7eTEnKXGHlBut5lY5Vnk6WUl

Hi Suneel,

The part of the OG module that computes is the compare function, which you've defined as a constant function. It should actually compare the fields of its arguments.

Cheers,
Li-yao

On 2022-09-12 12:18 PM, Suneel Sarswat wrote:
Dear Friends,
I am using MSets.MSetRBT to implement an algorithm on record type elements. I am able to successfully implement the program.
Before I started proving correctness, I wanted to check on some numerical examples. Unfortunately, I am not able to see what went wrong (possibly with OrderedType).
The elements are not added only using add and only one element is added. Here is the toy program. Please help.
Thanks in advance.
-Suneel

--------------------------

Require Export Coq.MSets.MSetInterface.
From Coq Require Import OrderedType.
Require Export MSetGenTree.
Require Export MSets.MSetRBT.
Require Import Coq.Arith.PeanoNat Lia.


Record game:Type:= Mk_order{
                        val1: nat;
                        val2: nat; }.

Definition ltg (b b':game):=
(Nat.lt (val1 b') (val1 b)) \/
((Nat.eq (val1 b') (val1 b)) /\ (Nat.lt (val2 b) (val2 b') )).

Definition eqg (b b':game):=
((Nat.eq (val1 b') (val1 b)) /\ (Nat.eq (val2 b) (val2 b') )).

Module OG <: Orders.OrderedType.

Definition t := game.
Definition eq (x y: t) := eqg x y.

Definition lt (x y: t):= ltg y x.

 Lemma eq_refl : forall x : t, eq x x.
  intros. unfold eq. unfold eqg. split.
  all:unfold Nat.eq;auto. Defined.

 Lemma eq_sym : forall x y : t, eq x y -> eq y x.
  unfold eq. unfold eqg. unfold Nat.eq. lia. Defined.

 Lemma eq_trans : forall x y z : t, eq x y -> eq y z -> eq x z.
  unfold eq. unfold eqg. unfold Nat.eq. lia. Defined.

 Definition eq_equiv: Equivalence eq.
  intros. constructor.
    unfold Reflexive. apply eq_refl.
    unfold Symmetric. apply eq_sym.
    unfold Transitive. apply eq_trans. Defined.

 Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
  unfold lt. unfold ltg. unfold Nat.eq. unfold Nat.lt. lia. Defined.

 Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
  unfold lt. unfold ltg. unfold Nat.lt.
  unfold eq. unfold eqg. unfold Nat.eq. lia. Defined.

 Definition lt_strorder: StrictOrder lt.
  constructor. unfold Irreflexive. unfold Reflexive. unfold complement.
  unfold lt. unfold ltg.  unfold Nat.eq.
  unfold Nat.lt. intros x H. lia.
  unfold Transitive. apply lt_trans. Defined.

 Definition lt_compat: Proper (eq ==> eq ==> iff) lt.
  unfold Proper. intros x y H. intro x0. intros y0 H1.
  unfold eq in H. unfold eq in H1.
  unfold eqg in H. unfold eqg in H1.
  unfold Nat.eq in H. unfold Nat.eq in H1.
  unfold lt. unfold ltg. unfold Nat.eq. unfold Nat.lt.
  lia. Defined.


 Definition compare : t -> t -> comparison.
  intros. constructor. Defined.

 Definition compare_spec : forall x y : t,
     CompareSpec (eq x y) (lt x y) (lt y x) (compare x y).
     intros. elim (compare x y). Admitted.

 Definition eq_dec : forall x y : t, {eq x y} + {~ eq x y}.
 Admitted.

End OG.

Module G. Include MakeRaw OG. End G.
Include MSetInterface.Raw2Sets OG G.

Definition A := G.add {|val1 :=1;val2:=1|}
                      ( G.add {|val1 :=2;val2:=4|}
                        ( G.add {|val1 :=2;val2:=2|}
                          ( G.add {|val1 :=1;val2:=2|}
                            ( G.add {|val1 :=3;val2:=2|} G.empty)))).

Eval compute in (G.max_elt A).
(*Some {| val1 := 3; val2 := 2 |}*)
Eval compute in (G.min_elt A).
(*Some {| val1 := 3; val2 := 2 |}*)
Eval compute in (G.elements A).
(* = {| val1 := 3; val2 := 2 |} :: nil
     : list game *)









Archive powered by MHonArc 2.6.19+.

Top of Page