Implicit Type s : t.Implicit Type x y : elt.Definition lt : t -> t -> Prop := M.lt.Definition min_elt : t -> option elt := M.min_elt.Definition max_elt : t -> option elt := M.max_elt.Definition min_elt_spec1 : forall s x, min_elt s = Some x -> In x s
   := M.min_elt_1.Definition min_elt_spec2 : forall s x y,
   min_elt s = Some x -> In y s -> ~ O.lt y x
   := M.min_elt_2.Definition min_elt_spec3 : forall s, min_elt s = None -> Empty s
   := M.min_elt_3.Definition max_elt_spec1 : forall s x, max_elt s = Some x -> In x s
   := M.max_elt_1.Definition max_elt_spec2 : forall s x y,
   max_elt s = Some x -> In y s -> ~ O.lt x y
   := M.max_elt_2.Definition max_elt_spec3 : forall s, max_elt s = None -> Empty s
   := M.max_elt_3.Definition elements_spec2 : forall s, sort O.lt (elements s)
   := M.elements_3.Definition choose_spec3 : forall s s' x y,
   choose s = Some x -> choose s' = Some y -> Equal s s' -> O.eq x y
   := M.choose_3.#[global]
  Instance lt_strorder : StrictOrder lt.#[global]
  Instance lt_compat : Proper (eq==>eq==>iff) lt.Definition compare s s' :=
   match M.compare s s' with
    | EQ _ => Eq
    | LT _ => Lt
    | GT _ => Gt
   end.

(* Specifications: *)
Lemma compare_spec : forall s s', CompSpec eq lt s s' (compare s s').