(** In the following module, we group results that are needed now to prove specifications of operations, but will also be provided later by the generic functor of properties. *)
(** ** Operations and constants *)

(* Specifications: *)
Lemma add_0_r n : n + 0 = n.
Lemma mul_0_r n : n * 0 = 0.
Lemma mul_1_l n : 1 * n = n.
(** ** Addition is commutative *)
Lemma add_comm n m : n + m = m + n.
(** ** Opposite distributes over addition *)
Lemma opp_add_distr n m : - (n + m) = - n + - m.
(** ** Opposite is injective *)
Lemma opp_inj n m : -n = -m -> n = m.
(** ** Addition is associative *)
Lemma pos_sub_add p q r :
pos_sub (p + q) r = pos p + pos_sub q r.