Les propositions (P -> Q) -> Qet P \/ Qsont équivalentes.
Existe-t-il un moyen de témoigner de cette équivalence à 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 = ???
tel que
from . to = idet to . from = id?
g = const someHardcodedB
aou b. Logique.
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))cela fonctionnerait. (Ceci est une preuve classique valide de l'implication.)
((a -> b) -> b)est isomorphe àa: la seule implémentation possible estg f = f someHardcodedA.