Propuestas (P -> Q) -> Q
y P \/ Q
son equivalentes.
¿Hay alguna manera de presenciar esta equivalencia en 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 = ???
tal que
from . to = id
y to . from = id
?
g = const someHardcodedB
a
o bien o b
. Tiene sentido.
to f = callcc (\k -> k (Right (f (\a -> k (Left a)))))
funcionaría. (Esta es una prueba clásica válida de la implicación.)
((a -> b) -> b)
es isomórfica paraa
: la única implementación posible esg f = f someHardcodedA
.