Inductive order : Set :=
  | L : order
  | E : order
  | G : order.Inductive order : Set :=
  | L : order
  | E : order
  | G : order.Inductive order : Set :=
  | L : order
  | E : order
  | G : order.Inductive order : Set :=
  | L : order
  | E : order
  | G : order.Definition comparison (v1 v2 : nat) :=
  match Lt_eq_Gt v1 v2 return order with
  | First _ => L
  | Second _ => E
  | Third _ => G
  end.

(* Specifications: *)
Lemma comparisonL : forall v1 v2 : nat, v1 < v2 -> Compare_Nat.comparison v1 v2 = L.
Lemma comparisonG : forall v1 v2 : nat, v1 > v2 -> Compare_Nat.comparison v1 v2 = G.
Lemma comparisonE : forall v1 v2 : nat, v1 = v2 -> Compare_Nat.comparison v1 v2 = E.
Lemma inv_comparisonL : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = L -> v1 < v2.
Lemma inv_comparisonE : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = E -> v1 = v2.
Lemma inv_comparisonG : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = G -> v1 > v2.
Lemma inv_comparison : forall v1 v2 : nat, match Compare_Nat.comparison v1 v2 return Prop with | L => v1 < v2 | E => v1 = v2 | G => v1 > v2 end.
Lemma comp_sym_LG : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = L -> Compare_Nat.comparison v2 v1 = G.
Lemma comp_sym_GL : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = G -> Compare_Nat.comparison v2 v1 = L.
Lemma comp_sym_E : forall v1 v2 : nat, Compare_Nat.comparison v1 v2 = E -> Compare_Nat.comparison v2 v1 = E.