(*****************************************************)
(**                   Addition                       *)
Definition def_add (x y : N.t) := recursion y (fun _ => S) x.
Local Infix "+++" := def_add (at level 50, left associativity).
#[global]
Instance def_add_wd : Proper (N.eq ==> N.eq ==> N.eq) def_add.

(* Specifications: *)
Theorem def_add_0_l : forall y, 0 +++ y == y.
Theorem def_add_succ_l : forall x y, S x +++ y == S (x +++ y).
Theorem def_add_add : forall n m, n +++ m == n + m.
Definition def_mul (x y : N.t) := recursion 0 (fun _ p => p +++ x) y.