let nat_of_int =
let rec f = function
n -> (* n >= 0 *)
if n = 0
then zero ()
else (if n mod 2 = 0 then d0 else d1) (f (n / 2))
in
function
z -> if z >= 0
then f (z)
else failwith ("nat_of_int : requires a non-negative integer as its argument")