Solution (source code)

= Solution

A <natural-number fold> iterates its first argument once per successor. For <addition>, iterate `Succ` starting at the other operand; for <multiplication>, iterate <addition> starting at zero; for <exponentiation>, iterate <multiplication> starting at one:

``
addF :: Natural -> Natural -> Natural
addF m n = foldNat Succ n m

mulF :: Natural -> Natural -> Natural
mulF m n = foldNat (addF n) Zero m

powerF :: Natural -> Natural -> Natural
powerF m n = foldNat (mulF m) (Succ Zero) n
``

The common identity is $\boxed{\operatorname{foldNat}\ f\ e\ n=f^n(e)}$, with $n$ interpreted through `convert`. Substituting each step and seed reproduces the recursive arithmetic equations of part (b).