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)
。
なぜこれを証明する必要があるのか よくわかりませんが、(defnによる)の記号証明を使用することは完全に合理的reverse x:y:z = z:y:x
であり、 + は可換(arth)であるため、reverse 1+2+3 = 3+2+1
、