関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0232デフォルトの名無しさん
2015/08/10(月) 10:22:50.55ID:6CToalvRWadlerの"Theorems for free"に、
r: ∀X. List(X) -> List(X) ならば a* o r-A = r-B o a*
ここで、a: A -> B, a*: List(A) -> List(B),
r-A: List(A) -> List(A), r-B: List(B) -> List(B)
という定理が出てきます。
しかし、ここのrやaをたとえば
r = { ["a", "b"] |-> ["a", "b", "b"],
[1, 2] |-> [2, 1],
........... }
a = { "a" |-> 1, "
"b" |-> 2,
............}
のようにとった場合、
a* (r-Char(["a", "b"]) = a* (["a", "b", "b"])
= [1, 2, 2]
r-Int (a* (["a", "b"]) = r-Int ([1, 2])
= [2, 1]
となってしまい、明らかに
この定理は成り立たないと思うのですが、どこか誤解があるでしょうか?
■ このスレッドは過去ログ倉庫に格納されています