(* Monotone (i.e. strictly increasing) functions for Ord Types *)
Section Mono.
Variables (A B :ordType).
Definition strictly_increasing f x y := @ord A x y -> @ord B (f x) (f y).
Structure mono : Type := Mono
{fun_of: A -> B; _: forall x y, strictly_increasing fun_of x y}.
End Mono.
Arguments strictly_increasing {A B} f x y.
Arguments Mono {A B _} _.
Section NatOrd.

(* Specifications: *)
Lemma irr_ltn_nat : irreflexive ltn. Proof. by move=>x; rewrite /= ltnn. Qed.
Lemma trans_ltn_nat : transitive ltn. Proof. by apply: ltn_trans. Qed.
Lemma total_ltn_nat x y : [|| x < y, x == y | y < x].
Lemma total_lex : forall x y, [|| lex x y, x == y | lex y x].
Definition prod_ordMixin := OrdMixin irr_lex trans_lex total_lex.