Definition MapsTo (i:key)(v:A)(m:t A) := find i m = Some v.Definition In (i:key)(m:t A) := exists e:A, MapsTo i e m.Definition Empty m := forall (a : key)(e:A) , ~ MapsTo a e m.Definition eq_key (p p':key*A) := E.eq (fst p) (fst p').Definition eq_key_elt (p p':key*A) :=
          E.eq (fst p) (fst p') /\ (snd p) = (snd p').Definition lt_key (p p':key*A) := E.lt (fst p) (fst p').Global Instance eqk_equiv : Equivalence eq_key := _.Global Instance eqke_equiv : Equivalence eq_key_elt := _.Global Instance ltk_strorder : StrictOrder lt_key := _.

(* Specifications: *)
Lemma mem_find : forall m x, mem x m = match find x m with None => false | _ => true end.
Lemma Empty_alt : forall m, Empty m <-> forall a, find a m = None.
Lemma Empty_Node : forall l o r, Empty (Node l o r) <-> o=None /\ Empty l /\ Empty r.
Lemma mem_1 : forall m x, In x m -> mem x m = true.
Lemma mem_2 : forall m x, mem x m = true -> In x m.
Lemma MapsTo_1 : E.eq x y -> MapsTo x e m -> MapsTo y e m.
Lemma find_1 : MapsTo x e m -> find x m = Some e.
Lemma find_2 : find x m = Some e -> MapsTo x e m.
Lemma empty_1 : Empty empty.
Lemma is_empty_1 : Empty m -> is_empty m = true.
Lemma is_empty_2 : is_empty m = true -> Empty m.
Lemma add_1 : E.eq x y -> MapsTo y e (add x e m).
Lemma add_2 : ~ E.eq x y -> MapsTo y e m -> MapsTo y e (add x e' m).
Lemma add_3 : ~ E.eq x y -> MapsTo y e (add x e' m) -> MapsTo y e m.
Lemma remove_1 : E.eq x y -> ~ In y (remove x m).
Lemma remove_2 : ~ E.eq x y -> MapsTo y e m -> MapsTo y e (remove x m).
Lemma remove_3 : MapsTo y e (remove x m) -> MapsTo y e m.
Lemma elements_1 : MapsTo x e m -> InA eq_key_elt (x,e) (elements m).
Lemma elements_2 : InA eq_key_elt (x,e) (elements m) -> MapsTo x e m.
Lemma xelements_bits_lt_1 : forall p p0 q m v, List.In (p0,v) (xelements m (append p (xO q))) -> E.bits_lt p0 p.
Lemma xelements_bits_lt_2 : forall p p0 q m v, List.In (p0,v) (xelements m (append p (xI q))) -> E.bits_lt p p0.
Lemma xelements_sort : forall p, sort lt_key (xelements m p).
Lemma elements_3 : sort lt_key (elements m).
Lemma elements_3w : NoDupA eq_key (elements m).