unfold A, lt in |- *; intros.
case a; case b.
intros a0 a1.
case (O1.lt_eq_lt_dec a0 a1).
simple destruct 1.
right.
auto.
simple destruct 1.
left.
right.
trivial.
left.
left.
trivial.
left; trivial.
left; trivial.
right.
auto.
intros a0 a1.
case (O2.lt_eq_lt_dec a0 a1).
simple destruct 1.
right.
auto.
simple destruct 1.
left.
right.
trivial.
left.
left.
trivial.
Defined.
End Sum_Order.
Module Nat_Order : DEC_ORDER with Definition A := nat with Definition
le := le with Definition lt := lt.
Definition A := nat.
Definition le := le.
Definition lt := lt.

(* Specifications: *)
Theorem ordered : order A le.
Theorem lt_le_weak : forall a b : A, lt a b -> le a b.
Theorem lt_diff : forall a b : A, lt a b -> a <> b.
Theorem le_lt_or_eq : forall a b : A, le a b -> lt a b \/ a = b.
Definition lt_eq_lt_dec : forall a b : A, {lt a b} + {a = b} + {lt b a} :=
lt_eq_lt_dec.