Module MO:=OrderedTypeFacts(O).Notation key:=t.Definition eqk (p p':key*elt) := eq (fst p) (fst p').Definition eqke (p p':key*elt) :=
          eq (fst p) (fst p') /\ (snd p) = (snd p').Definition ltk (p p':key*elt) := lt (fst p) (fst p').#[global]
 Hint Extern 2 (eqke ?a ?b) => split : ordered_type.

Lemma ltk_trans : forall e e' e'', ltk e e' -> ltk e' e'' -> ltk e e''.