let rec pre = function
  n -> if is_zero (n)
         then failwith ("pre : requires a non-zero natural number as its argument")
         else
           if is_one (n)
             then zero ()
             else if is_zero (prepre (n))
                    then one ()
                    else sucsuc (pre (prepre (n)))