Vorschläge (P -> Q) -> Q
undP \/ Q
sind gleichwertig.
Gibt es eine Möglichkeit, diese Gleichwertigkeit in Haskell zu bezeugen:
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 = ???
so dass
from . to = id
und to . from = id
?
g = const someHardcodedB
a
oder b
. Macht Sinn.
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))
würde das funktionieren. (Dies ist ein gültiger klassischer Beweis für die Implikation.)
((a -> b) -> b)
isomorph ist zua
: Die einzig mögliche Implementierung istg f = f someHardcodedA
.