Zij gegeven:

(++) :: [a] [a] -> [a]
(++) []     xs = xs                (1)
(++) [y:ys] xs = [y : ys ++ xs]    (2)

map :: (a -> b) [a] -> [b]
map f []       = []                (3)
map f [x:xs]   = [f x : map f xs]  (4)

flatten :: [[a]] -> [a]
flatten []     = []                (5)
flatten [x:xs] = x ++ (flatten xs) (6)

1. 
Te bewijzen: 
	voor iedere functie f, eindige lijst as en bs:
		
		map f (as ++ bs) = (map f as) ++ (map f bs)

Bewijs:
	met inductie naar de lengte van as.

	Basis:
	aanname: as = [].

	     map f ([] ++ bs) = (map f []) ++ (map f bs)                  basis
	           ********
	  => map f (bs) = (map f []) ++ (map f bs)                        (1)
	                   ********
	  => map f (bs) = [] ++ (map f bs)                                (3)
	                  ****************
	  => map f bs = map f bs                                          (1)

	Inductiestap:
	aanname: stelling geldt voor zekere as, ofwel:
		map f (as ++ bs) = (map f as) ++ (map f bs) (IH)

	Te bewijzen: stelling geldt ook voor as, ofwel:
		map f ([a:as] ++ bs) = (map f [a:as]) ++ (map f bs)

	     map f ([a:as] ++ bs) = (map f [a:as]) ++ (map f bs)          basis
	  	 ************
	  => map f [a:as ++ bs] = (map f [a:as]) ++ (map f bs)            (2)
	    ******************
	  => [f a : map f (as ++ bs)] = (map f [a:as]) ++ (map f bs)      (4)
	                                ************
	  => [f a : map f (as ++ bs)] = [f a : map f as] ++ (map f bs)    (4)
	                                ****************************
	  => [f a : map f (as ++ bs)] = [f a : (map f as) ++ (map f bs)]  (4)
	           ****************           ************************
	  => map f (as ++ bs) = (map f as) ++ (map f bs)                  (IH)

	Dus: basis + inductiestap => stelling bewezen.

2. 
Te bewijzen:
	voor iedere functie f, voor iedere eindige lijst xs:
	
		flatten (map (map f) xs) = map f (flatten xs)

Bewijs:
	met inductio van de lengte van xs
	
	Basis:
	aanname: xs = [].

	    flatten (map (map f) []) = map f (flatten [])                                basis
	             **************
	  = flatten [] = map f (flatten [])                                              (3)
	                        **********
	  = flatten [] = map f []                                                        (5)
	    **********
	  = [] = map f []                                                                (5)
	         *****
	  = [] = []                                                                      (3)

	Inductiestap:
	aanname: stelling geldt voor zekere xs, ofwel:
		flatten (map (map f) xs) = map f (flatten xs)

	Te bewijzen: stelling geldt ook voor xs, ofwel:
		flatten (map (map f) [x:xs]) = map f (flatten [x:xs])

	     flatten (map (map f) [x:xs]) = map f (flatten [x:xs])                       basis
	              ******************
	  => flatten [map f x: map (map f) xs] = map f (flatten [x:xs])                  (4)
	     *********************************
	  => (map f x) ++ (flatten (map (map f) xs)) = map f (flatten [x:xs])            (6)
	                                                    **************
	  => (map f x) ++ (flatten (map (map f) xs)) = map f (x ++ (flatten xs))         (6)
	                                               *************************
	  => (map f x) ++ (flatten (map (map f) xs)) = (map f x) ++ (map f (flatten xs)) (9.4.1)
	                   ************************                  ****************
	  => flatten (map (map f) xs) = map f (flatten xs)                               (IH)

	Dus: basis + inductiestap => stelling  bewezen.