命題(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
。可能な実装はだけです。