練習問題 4.6.1
第3双対定理を証明せよ.第3双対定理
foldr f e xs = foldl (flip f) e (reverse xs)
xs上の帰納法により証明
[]の場合:
foldr f e []
= { foldr の定義 }
e
= { foldl の定義 }
foldl (flip f) e []
= { reverse の定義 }
foldl (flip f) e (reverse [])
(x:xs) の場合:
foldr f e (x:xs)
= { foldr の定義 }
f x (foldr f e xs)
= { 帰納法の仮定 }
f x (foldl (flip f) e (reverse xs))
= { flip の定義 }
(flip f) (foldl (flip f) e (reverse xs)) x
= { 任意の g について foldl g y [x] = g y x であるから }
foldl (flip f) (foldl (flip f) e (reverse xs)) [x]
= { 任意の g について foldl g e (xs ++ ys) = foldl g (foldl g e xs) ys だから }
foldl (flip f) e (reverse xs ++ [x])
= { reverse の定義 }
foldl (flip f) e (reverse (x:xs))