let rec half = function
  n -> if is_zero (n) or is_one (n)
         then zero ()
         else suc (half (prepre (n)))