(*****************************************************)
(**                  Multiplication                  *)

Definition def_mul (x y : N.t) := recursion 0 (fun _ p => p +++ x) y.Local Infix "**" := def_mul (at level 40, left associativity).#[global]
Instance def_mul_wd : Proper (N.eq ==> N.eq ==> N.eq) def_mul.

(* Specifications: *)
Theorem def_mul_0_r : forall x, x ** 0 == 0.
Theorem def_mul_succ_r : forall x y, x ** S y == x ** y +++ x.
Theorem def_mul_mul : forall n m, n ** m == n * m.