प्रस्ताव (P -> Q) -> Q
और P \/ Q
समतुल्य हैं।
क्या हास्केल में इस समानता को देखने का कोई तरीका है:
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
।