(* Some alternative names: *)
Notation mul_eq_0_l := eq_mul_0_l.
Notation mul_eq_0_r := eq_mul_0_r.

(* Specifications: *)
Theorem lt_0_mul n m : 0 < n * m <-> (0 < n /\ 0 < m) \/ (m < 0 /\ n < 0).
Theorem square_lt_mono_nonneg : forall n m, 0 <= n -> n < m -> n * n < m * m.
Theorem square_le_mono_nonneg : forall n m, 0 <= n -> n <= m -> n * n <= m * m.
(* The converse theorems require nonnegativity (or nonpositivity) of the other variable *)
Theorem square_lt_simpl_nonneg : forall n m, 0 <= m -> n * n < m * m -> n < m.
Theorem square_le_simpl_nonneg : forall n m, 0 <= m -> n * n <= m * m -> n <= m.
Theorem mul_2_mono_l : forall n m, n < m -> 1 + 2 * n < 2 * m.
Lemma add_le_mul : forall a b, 1<a -> 1<b -> a+b <= a*b.
(** A few results about squares *)
Lemma square_nonneg : forall a, 0 <= a * a.
Lemma crossmul_le_addsquare : forall a b, 0<=a -> 0<=b -> b*a+a*b <= a*a+b*b.
Lemma add_square_le : forall a b, 0<=a -> 0<=b ->
a*a + b*b <= (a+b)*(a+b).
Lemma square_add_le : forall a b, 0<=a -> 0<=b ->
(a+b)*(a+b) <= 2*(a*a + b*b).
Lemma quadmul_le_squareadd : forall a b, 0<=a -> 0<=b ->
2*2*a*b <= (a+b)*(a+b).