Notation mul_nonpos := le_mul_0 (only parsing).
Notation le_0_square := square_nonneg (only parsing).

(* Specifications: *)
Theorem nlt_square_0 : forall n, ~ n * n < 0.
Theorem square_lt_mono_nonpos : forall n m, n <= 0 -> m < n -> n * n < m * m.
Theorem square_le_mono_nonpos : forall n m, n <= 0 -> m <= n -> n * n <= m * m.
Theorem square_lt_simpl_nonpos : forall n m, m <= 0 -> n * n < m * m -> m < n.
Theorem square_le_simpl_nonpos : forall n m, m <= 0 -> n * n <= m * m -> m <= n.
Theorem lt_1_mul_neg : forall n m, n < -1 -> m < 0 -> 1 < n * m.
Theorem lt_mul_m1_neg : forall n m, 1 < n -> m < 0 -> n * m < -1.
Theorem lt_mul_m1_pos : forall n m, n < -1 -> 0 < m -> n * m < -1.
Theorem lt_1_mul_l : forall n m, 1 < n ->
n * m < -1 \/ n * m == 0 \/ 1 < n * m.
Theorem lt_m1_mul_r : forall n m, n < -1 ->
n * m < -1 \/ n * m == 0 \/ 1 < n * m.
Theorem eq_mul_1 : forall n m, n * m == 1 -> n == 1 \/ n == -1.
Theorem lt_mul_diag_l : forall n m, n < 0 -> (1 < m <-> n * m < n).
Theorem lt_mul_diag_r : forall n m, 0 < n -> (1 < m <-> n < n * m).
Theorem le_mul_diag_l : forall n m, n < 0 -> (1 <= m <-> n * m <= n).
Theorem le_mul_diag_r : forall n m, 0 < n -> (1 <= m <-> n <= n * m).
Theorem lt_mul_r : forall n m p, 0 < n -> 1 < p -> n < m -> n < m * p.
Definition mul_eq_1 := eq_mul_1.