(*****************************************************)
(**            Power                                 *)
Local Infix "^^" := pow (at level 30, right associativity).
#[global]
Instance pow_wd : Proper (N.eq==>N.eq==>N.eq) pow.

(* Specifications: *)
Lemma pow_0 : forall n, n^^0 == 1.
Lemma pow_succ : forall n m, n^^(S m) == n*(n^^m).
Definition log (x : N.t) : N.t :=
strong_rec 0
(fun g x =>
if x << 2 then 0
else S (g (half x)))
x.