(** Compatibility of addition wrt to being positive *)

Notation Zplus_le_0_compat := Z.add_nonneg_nonneg (only parsing).

(* Specifications: *)
Lemma Zplus_le_reg_l n m p : p + n <= p + m -> n <= m.
Lemma Zplus_le_reg_r n m p : n + p <= m + p -> n <= m.
Lemma Zplus_lt_reg_l n m p : p + n < p + m -> n < m.
Lemma Zplus_lt_reg_r n m p : n + p < m + p -> n < m.
Lemma Zplus_gt_reg_l n m p : p + n > p + m -> n > m.
Lemma Zplus_gt_reg_r n m p : n + p > m + p -> n > m.
Lemma Zmult_le_compat_r n m p : n <= m -> 0 <= p -> n * p <= m * p.
Lemma Zmult_le_compat_l n m p : n <= m -> 0 <= p -> p * n <= p * m.
Lemma Zmult_lt_compat_r n m p : 0 < p -> n < m -> n * p < m * p.
Lemma Zmult_gt_compat_r n m p : p > 0 -> n > m -> n * p > m * p.
Lemma Zmult_gt_0_lt_compat_r n m p : p > 0 -> n < m -> n * p < m * p.
Lemma Zmult_gt_0_le_compat_r n m p : p > 0 -> n <= m -> n * p <= m * p.
Lemma Zmult_lt_0_le_compat_r n m p : 0 < p -> n <= m -> n * p <= m * p.
Lemma Zmult_gt_0_lt_compat_l n m p : p > 0 -> n < m -> p * n < p * m.
Lemma Zmult_lt_compat_l n m p : 0 < p -> n < m -> p * n < p * m.
Lemma Zmult_gt_compat_l n m p : p > 0 -> n > m -> p * n > p * m.
Lemma Zmult_ge_compat_r n m p : n >= m -> p >= 0 -> n * p >= m * p.
Lemma Zmult_ge_compat_l n m p : n >= m -> p >= 0 -> p * n >= p * m.
Lemma Zmult_ge_compat n m p q : n >= p -> m >= q -> p >= 0 -> q >= 0 -> n * m >= p * q.
Lemma Zmult_le_compat n m p q : n <= p -> m <= q -> 0 <= n -> 0 <= m -> n * m <= p * q.
Lemma Zmult_gt_0_lt_reg_r n m p : p > 0 -> n * p < m * p -> n < m.
Lemma Zmult_lt_reg_r n m p : 0 < p -> n * p < m * p -> n < m.
Lemma Zmult_le_reg_r n m p : p > 0 -> n * p <= m * p -> n <= m.
Lemma Zmult_lt_0_le_reg_r n m p : 0 < p -> n * p <= m * p -> n <= m.
Lemma Zmult_ge_reg_r n m p : p > 0 -> n * p >= m * p -> n >= m.
Lemma Zmult_gt_reg_r n m p : p > 0 -> n * p > m * p -> n > m.
Lemma Zmult_lt_compat n m p q : 0 <= n < p -> 0 <= m < q -> n * m < p * q.
Lemma Zmult_lt_compat2 n m p q : 0 < n <= p -> 0 < m < q -> n * m < p * q.