At 14:30 +0000 98/10/26, Peter Thiemann wrote:
>> Haskell translates  f f = f  into  f := f |-> f; on the right hand side
>>"f" is a bound variable, on the left hand side "f" is a name. Suppose I
><inidicate variables with a slash, then the formula would read
>>     f := \f |-> \f
>>> or f(\f) := \f.
>
>I don't really understand your remark. f f = f  as a toplevel
>definition is equivalent to (in this special case)
>
>letrec ...
>       f = \f -> f
>       ...

  I just avoid using Haskell notation in order to not get the notation
confused as Haskell does.

>It's not different logical entities, all occurrences of f are variables.

  Different occurrences of f have different semantic meaning (that is, the
"f" in one place is not the same as the "f" in another place).

>It's not Haskell that's causing the confusion if any, it's the lambda
>calculus, more precisely: alpha-conversion.

  The original question was this: What is the meaning of "f(f) = f"? I
remarked that in this case Haskell has a very good strategy, namely
interpreting it as the expression f := f |-> f, or "f is assigned the
expression  lambda f f" if you so want; the lack of such a good strategy
seemed to cause the other problems discussed in this thread.

  Otherwise, the naming of functions is not part of the lambda calculus;
one must add an interpretation of this lambda calculus in order to arrive
at a meaning of an assignment in the computer sense. (For example, if I
define \f to denote a free variable, I could assign f := \f + 1, and later
bind this \f by the assignment f := \f |-> f, which would work out to the
increment function. In this example, free variables and symbol table names
have a distinctly different behavior.)

  Hans Aberg
                  * Email: Hans Aberg <mailto:[EMAIL PROTECTED]>
                  * Home Page: <http://www.matematik.su.se/~haberg/>
                  * AMS member listing: <http://www.ams.org/cml/>



Reply via email to