1. Prove by induction that |foldNat f e = foldNat' f e|. 2. The factorial function is defined as > fact O = S O > fact (S n) = (S n) `times` fact n Write |fact| using |paraNat| and using |foldNat'|. Which is more efficient in Haskell? In a strict language? 3. Implement |length|, |sum|, and |prod| as folds on lists, where > lengthL Nil = O > lengthL (Cons a as) = S (lengthL as) > sumL Nil = O > sumL (Cons n ns) = n `plus` (sumL ns) > prodL Nil = S O > prodL (Cons n ns) = n `times` (prodL ns) 4. Write the functions |headL| and |tailL| as instances of |paraList|, where > headL Nil = Nothing > headL (Cons a as) = Just a > tailL Nil = Nothing > tailL (Cons a as) = Just as