[Haskell-cafe] Re: Proof question -- (==) over Bool
Alexander Solla
ajs at 2piix.com
Mon May 24 03:05:40 EDT 2010
On May 23, 2010, at 2:53 AM, Lennart Augustsson wrote:
> BTW, the id function works fine on bottom, both from a semantic and
> implementation point of view.
Yes, but only because it doesn't work at all. Consider that calling
> id undefined
requires evaluating undefined before you can call id. The program
will "crash" before you ever call id. Of course, the identity
function "should" have produced a value that crashed in exactly the
same way. But we never got there.
It works in same way (==) works on bottoms. Vacuously. Indeed,
functions only work on values. There is no value of type (forall a .
a). Ergo, id does not work on undefined, as a function applying to a
value. It is happy coincidence that the behavior of the runtime can
be made mostly compatible with our familiar semantics. But not
entirely.
Consider:
*Main> let super_undefined = super_undefined
*Main> undefined == super_undefined
*** Exception: Prelude.undefined
*Main> super_undefined == super_undefined
(wait forever)
*Main> id super_undefined
(wait forever)
*Main> id undefined
*** Exception: Prelude.undefined
From a mathematical perspective, super_undefined is
Prelude.undefined. But it takes some runtime level hackery to make
undefined an exceptional "value". Without it, super_undefined loops,
despite the fact that their definitions are exactly the same (The
"value" defined by itself).
I did not suggest those are the wrong semantics. Only that the study
of their semantics doesn't belong to the study of Haskell as a logic/
language.
More information about the Haskell-Cafe
mailing list