Proposições (P -> Q) -> Qe P \/ Qsão equivalentes.
Existe uma maneira de testemunhar essa equivalência em 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 = ???
de tal modo que
from . to = ide to . from = id?
g = const someHardcodedB
aou b. Faz sentido.
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))funcionaria. (Esta é uma prova clássica válida da implicação.)
((a -> b) -> b)é isomórficaa: a única implementação possível ég f = f someHardcodedA.