Parameter t: Type.Definition eq := @Logic.eq t.Definition eq_equiv := @eq_equivalence t.Parameter lt : t -> t -> Prop.Parameter lt_strorder : StrictOrder lt.Parameter lt_compat : Proper (eq==>eq==>iff) lt.Parameter compare : forall x y : t, comparison.Axiom compare_spec: forall s s' : t, CompSpec eq lt s s' (compare s s').Parameter eq_dec : forall x y : t, {eq x y} + {~ eq x y}.(* Version 1: Use this version if you want proper abstraction
 *)

Parameter minid : Ident.t.Parameter id2pos: Ident.t -> positive.Parameter pos2id: positive -> Ident.t.Axiom pos2id_inj: forall x y, pos2id x = pos2id y -> x = y.Axiom minid_eq: id2pos minid = 1%positive.Axiom Ilt_morphism: forall x y, Ident.lt x y -> Plt (id2pos x) (id2pos y).Parameter another_id: Ident.t -> Ident.t.(* Note: usually "Ident.lt x (another_var x)", but not always; if you
   are writing an algorithm, make sure by doing the comparison! *)

(* Note that there are NO AXIOMS about the following operators!
 *)

Parameter Z2id: Z -> Ident.t.Parameter add_id: Ident.t -> Ident.t -> Ident.t.Parameter mult_id: Ident.t -> Ident.t -> Ident.t.

Lemma minid_min x : Ident.lt x minid -> False.