命題(P -> Q) -> QとP \/ Q同等です。
Haskellでこの同等性を確認する方法はありますか。
from :: Either a b -> ((a -> b) -> b)
from x = case x of
Left a -> \f -> f a
Right b -> \f -> b
to :: ((a -> b) -> b) -> Either a b
to = ???
そのような
from . to = idとto . from = id?
g = const someHardcodedB
aかb。理にかなっています。
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))機能します。(これはその意味の有効な古典的な証明です。)
((a -> b) -> b)が同型であるということaですg f = f someHardcodedA。可能な実装はだけです。