我阅读 RWH 失败;没有人要退出,我订购了 Haskell: The Craft of Functional Programming。现在我对第 146 页上的这些功能证明感到好奇。具体来说,我正在尝试证明 8.5.1 sum (reverse xs) = sum xs
。我可以做一些归纳证明,但后来我被卡住了..
炒作:
sum ( reverse xs ) = sum xs
根据:
sum ( reverse [] ) = sum []
Left = sum ( [] ) (reverse.1)
= 0 (sum.1)
Right = 0 (sum.1)
就职:
sum ( reverse (x:xs) ) = sum (x:xs)
Left = sum ( reverse xs ++ [x] ) (reverse.2)
Right = sum (x:xs)
= x + sum xs (sum.2)
所以现在我只是想证明它Left
sum ( reverse xs ++ [x] )
等于Right
x + sum xs
,但这与我开始的地方并不太远sum ( reverse (x:xs) ) = sum (x:xs)
。
我不太确定为什么需要证明这一点,使用reverse x:y:z = z:y:x
(by defn) 的符号证明似乎完全合理,因为 + 是可交换的 (arth) then reverse 1+2+3 = 3+2+1
,