(*****************************************************)
(**                  Multiplication                  *)
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.
Definition ltb (m : N.t) : N.t -> bool :=
recursion
(if_zero false true)
(fun _ f n => recursion false (fun n' _ => f n') n)
m.