Module Type StrOrder := EqualityType <+ HasLt <+ IsStrOrder.
Module Type StrOrder' := StrOrder <+ EqLtNotation.
(** Versions with a decidable ternary comparison *)
Module Type HasCmp (Import T:Typ).
Parameter Inline compare : t -> t -> comparison.
End HasCmp.
Module Type CmpNotation (T:Typ)(C:HasCmp T).
Infix "?=" := C.compare (at level 70, no associativity).
End CmpNotation.
Module Type CmpSpec (Import E:EqLt')(Import C:HasCmp E).

(* Specifications: *)
Axiom compare_spec : forall x y, CompareSpec (x==y) (x<y) (y<x) (compare x y).
End CmpSpec.