Definition compare : forall x y : t, Compare lt eq x y.Definition eq_dec := N_as_OT.eq_dec.Module E:=NUsualOrderedType.Module ME:=OrderedTypeFacts(E).Module PE:=KeyOrderedType(E).Definition key := N.Definition t := Map.Definition empty : t A := M0 A.Definition is_empty (m : t A) : bool := 
    MapEmptyp _ (MapCanonicalize _ m).Definition find (x:key)(m: t A) : option A := MapGet _ m x.Definition mem (x:key)(m: t A) : bool := 
    match find x m with 
     | Some _ => true
     | None => false
    end.Definition add (x:key)(v:A)(m:t A) : t A := MapPut _ m x v.Definition remove (x:key)(m:t A) : t A := MapRemove _ m x.Definition elements (m : t A) : list (N*A) := alist_of_Map _ m.Definition cardinal (m : t A) : nat := MapCard _ m.Definition MapsTo (x:key)(v:A)(m:t A) := find x m = Some v.Definition In (x:key)(m:t A) := exists e:A, MapsTo x 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').

(* Specifications: *)
Lemma Empty_alt : forall m, Empty m <-> forall a, find a m = None.
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 mem_1 : In x m -> mem x m = true.
Lemma mem_2 : forall m x, mem x m = true -> In x 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 alist_sorted_sort : forall l, alist_sorted A l=true -> sort lt_key l.
Lemma elements_3 : sort lt_key (elements m).
Lemma elements_3w : NoDupA eq_key (elements 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 cardinal_1 : forall m, cardinal m = length (elements m).