aboutsummaryrefslogtreecommitdiffhomepage
path: root/theories/FSets/FSetAVL.v
diff options
context:
space:
mode:
authorGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2007-02-28 21:34:53 +0000
committerGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2007-02-28 21:34:53 +0000
commit10121a63ed037371194b04f706b157cb1877fad8 (patch)
treed8acbc8261c8174e58b1433eff000dbb80ee2057 /theories/FSets/FSetAVL.v
parent1dc68aafe1dbf186cb6b851eaba95174ec636841 (diff)
FSetInterface: new item choose_equal in the spec S (request of P. Casteran)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@9684 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'theories/FSets/FSetAVL.v')
-rw-r--r--theories/FSets/FSetAVL.v46
1 files changed, 46 insertions, 0 deletions
diff --git a/theories/FSets/FSetAVL.v b/theories/FSets/FSetAVL.v
index bbb29158d..8bd51abec 100644
--- a/theories/FSets/FSetAVL.v
+++ b/theories/FSets/FSetAVL.v
@@ -2542,6 +2542,38 @@ Proof.
apply subset'_2; auto.
Qed.
+Lemma choose_equal: forall s s', bst s -> avl s -> bst s' -> avl s' ->
+ (equal' s s')=true ->
+ match choose s, choose s' with
+ | Some x, Some x' => X.eq x x'
+ | None, None => True
+ | _, _ => False
+ end.
+Proof.
+ unfold choose; intros s s' Hb Ha Hb' Ha' H.
+ generalize (equal'_2 s s' Hb Ha Hb' Ha' H); clear H; intros.
+ generalize (@min_elt_1 s) (@min_elt_2 s) (@min_elt_3 s).
+ generalize (@min_elt_1 s') (@min_elt_2 s') (@min_elt_3 s').
+ destruct (min_elt s) as [x|]; destruct (min_elt s') as [x'|]; auto.
+
+ intros H1 H2 _ H1' H2' _.
+ destruct (X.compare x x'); auto.
+ assert (In x s) by auto.
+ rewrite (H x) in H0.
+ destruct (H2 x' x); auto.
+ assert (In x' s') by auto.
+ rewrite <- (H x') in H0.
+ destruct (H2' x x'); auto.
+
+ intros _ _ H3 H1' _ _.
+ destruct (H3 (refl_equal _) x).
+ rewrite <- (H x); auto.
+
+ intros H1 _ _ _ _ H3'.
+ destruct (H3' (refl_equal _) x').
+ rewrite (H x'); auto.
+Qed.
+
End Raw.
(** * Encapsulation
@@ -2877,6 +2909,20 @@ Module IntMake (I:Int)(X: OrderedType) <: S with Module E := X.
Lemma choose_2 : choose s = None -> Empty s.
Proof. exact (Raw.choose_2 s). Qed.
+ Lemma choose_equal: (equal s s')=true ->
+ match choose s, choose s' with
+ | Some x, Some x' => E.eq x x'
+ | None, None => True
+ | _, _ => False
+ end.
+ Proof.
+ intros.
+ unfold choose.
+ apply Raw.choose_equal; auto.
+ apply Raw.equal'_1; auto.
+ exact (equal_2 H).
+ Qed.
+
Lemma eq_refl : eq s s.
Proof. exact (Raw.eq_refl s). Qed.
Lemma eq_sym : eq s s' -> eq s' s.