Propozycje (P -> Q) -> Qi P \/ Qsą równoważne.
Czy istnieje sposób, aby być świadkiem tej równoważności w 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 = ???
takie, że
from . to = idi to . from = id?
g = const someHardcodedB
aalbo b. Ma sens.
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))by działało. (Jest to ważny klasyczny dowód implikacji.)
((a -> b) -> b)jest izomorficzna dlaa: jedyną możliwą implementacją jestg f = f someHardcodedA.