Class Ord (A : Type) := {
  ord_dec : A -> A -> comparison;
  ord_refl : forall x, ord_dec x x = Eq;
  ord_eq : forall x y, ord_dec x y = Eq -> x = y;
  ord_lt_trans : forall x y z,
    ord_dec x y = Lt ->
    ord_dec y z = Lt ->
    ord_dec x z = Lt;
  }.Class Ord (A : Type) := {
  ord_dec : A -> A -> comparison;
  ord_refl : forall x, ord_dec x x = Eq;
  ord_eq : forall x y, ord_dec x y = Eq -> x = y;
  ord_lt_trans : forall x y z,
    ord_dec x y = Lt ->
    ord_dec y z = Lt ->
    ord_dec x z = Lt;
  }.Class Ord (A : Type) := {
  ord_dec : A -> A -> comparison;
  ord_refl : forall x, ord_dec x x = Eq;
  ord_eq : forall x y, ord_dec x y = Eq -> x = y;
  ord_lt_trans : forall x y z,
    ord_dec x y = Lt ->
    ord_dec y z = Lt ->
    ord_dec x z = Lt;
  }.Class Ord (A : Type) := {
  ord_dec : A -> A -> comparison;
  ord_refl : forall x, ord_dec x x = Eq;
  ord_eq : forall x y, ord_dec x y = Eq -> x = y;
  ord_lt_trans : forall x y z,
    ord_dec x y = Lt ->
    ord_dec y z = Lt ->
    ord_dec x z = Lt;
  }.Class Ord (A : Type) := {
  ord_dec : A -> A -> comparison;
  ord_refl : forall x, ord_dec x x = Eq;
  ord_eq : forall x y, ord_dec x y = Eq -> x = y;
  ord_lt_trans : forall x y z,
    ord_dec x y = Lt ->
    ord_dec y z = Lt ->
    ord_dec x z = Lt;
  }.

Lemma compare_lt_trans : forall x y z, x ?= y = Lt -> y ?= z = Lt -> x ?= z = Lt.