Definition of Lambda Calculus

https://en.wikipedia.org/wiki/Lambda_calculus_definition

  • formal definition

    • variables

    • λ-abstraction

    • λ-application

    • fixity

    • conveniences

    • λ-term

    • λ-expression

  • Axioms

    • α-conversion

    • β-reduction

    • η-conversion

  • Evaluation

    • applicative (usual), rightmost innermost first

    • normal (lazy), leftmost outermost

Definition

The LC may be considered as the minimal universal FPL as it consists of a transformation rule and a scheme for defining functions. It is universal because it can express and evaluate any computable function and in that regard it is equivalent to Turing machines. However, LC is more inclined towards the use of transformation rules, that is, it's more about the software aspect of computation then the hardware aspect.

The central element in the LC is the λ-expression which is defined recursively:

<exp> := <var> | <abs> | <app>
<abs> := "λ" <var> "." <exp>
<app> := <exp> <exp>
<var> := "a" | "b" | "c" | ...

Lambda abstration is a form for defining functions, which, in general, looks like λx.N where N is a lambda expression (also called the body of a function), and x is the function's formal parameter.

Lambda application is a form of applying a function to an argument. It generally looks like (λx.N)M, where M is a lambda expansion; the arg will be bound to the formal parameter x, which means that every (free) occurance of the identifier x in the body N will be replaced with M, conventionally denoted by [x/M]N.

Variables appear only as function parameters, either in the binding context as binding ocurances or in a function's body as the application occurances.The "" in the spec is just an identifier for parameters that appear in the function, formal and actual params. By convention, identifiers for parameters are chosen from the alphabet of lower-case letters.

Even though the given BNF spec allows it, it makes no sense for a single var to appear by itself at the top level. It also makes no sense if a final, fully evaluated, lambda expression contains free variables.

There should be only one lambda expresion at the top level, and that expr should end up as a lambda abstraction (which, in the end, can only be understood as representing something other then itself; usually, it will represent some mathematical object depending on the actual encoding scheme employed; e.g. like λsz.s(sz) standing for integer 2).

Bound and free variables

A variable whose binding occurance is in scope is a bound variable, otherwise it is a free variable. It is important to distinguish between them since the same identifier can occur multiple times and have different meaning in different scope. For example, in the λ-expr λx.λy(λx.yx)(λy.xy)xy

binding occurance      application occurances
 ↓                               ↓      ↓
λx₁ . λy₁ . (λx₂ . y₁ x₂) (λy₂ . x₁ y₂) x₁ y₂
                 \_____/
                    |
            the scope of λx₂
    \_________________________________________ the scope of λx₁

Bound and free occurances of an identifier are relative and depend on the part of the lambda expr under consideration. The above shows that the binder λx₁ has the widerest possible scope, which can be restricted with parenthesis. The parenthesized binding context may introduce new scope, like λx₂ does. The occurance of x (labelled as x₂) is not bound to the first λx (labelled as λx₁) but to the inner λx (labelled as λx₂). This process of re-labelling identifiers with fresh names, in order to distinguish them easily and avoid confusion of what is bound where, is called α-conversion. Alpha conversion does not change the meaning of a lambda expression, e.g. λx.λy.x (λx.xy) x isthe same as λx.λy.x (λa.ay) x but the latter avoids possible name capture during variable substitution.

  • The α-conversion

  • The β-reduction

  • The η-conversion is related to point-free (η-reduction) vs point-full (η-expansion) equational style

Last updated