Section Lexicographic_Product.
Variables A B : Type.
Variable ltA : A -> A -> Prop.
Variable ltB : B -> B -> Prop.
Hypothesis wf_ltA : well_founded ltA.
Hypothesis wf_ltB : well_founded ltB.
Inductive lexprod : A*B -> A*B -> Prop :=
| lex_l : forall a a' b b', ltA a a' -> lexprod (a, b) (a', b')
| lex_r : forall a    b b', ltB b b' -> lexprod (a, b) (a,  b').
Definition lex_prod_dec:
(forall a1 a2 : A, {a1 = a2} + {a1 <> a2}) ->
(forall a1 a2, {ltA a1 a2} + {~ltA a1 a2}) ->
(forall b1 b2, {ltB b1 b2} + {~ltB b1 b2}) ->
(forall x y, {lexprod x y} + {~ lexprod x y}).
End Last.

Lemma beq_eq_dec {A : Type} {beq : A -> A -> bool} (Hbeq : forall x y, beq x y = true <-> x = y) : forall (x y : A), {x = y} + {~ x = y}.