The variables in the λ-calculus are unnecessary and the nameless λ-calculus dispenses with them entirely. Independently both Berkling and de Bruijn came up with such a scheme. We shall call the nameless λ-calculus the Λ-calculus.
The alphabet of Λ-terms is defined as follows:
#,0, 1, 2, ...,Λ,(, ), ..The set of Λ-terms, S, is defined inductively as follows:
#n∈S, where n is a natural number,M∈S; then Λ.M∈S, M,N∈S then (MN)∈S.
The parentheses are usually dropped if they are not needed to give a unique reading.
We call Λ-terms of the form #n indices.
We call Λ-terms of the form (MN) applications.
We call Λ-terms of the form Λ.M abstractions.
The function φ that converts λ-terms to Λ-terms defined as follows:
φ(x, ρ) = #n where n = ρ(x),
φ(λx.M, ρ) = Λ.M' where M' = φ(M, ρ'),
and ρ'(y) = 0 if y=x, otherwise ρ'(y) = 1 + ρ(y)
φ((M N), ρ) = (M' N') where M' = φ(M, ρ) and N' = φ(N, ρ)
Given an initial ρ such that ρ(y) is undefined for all y, the Λ-term conversion of the λ-term M
is φ(M, ρ).
Note how indices are similar to addresses in a stack frame built during nested function calls in typical programming languages. Indices are sometimes known as de Bruijn indices.
Examples of Λ-terms follow:
Λ.#0 which is the equivalent of λx.xΛ.Λ.#1 which is the equivalent of λx.λy.x(Λ.#0 Λ.#0) which is the equivalent of (λx.x λy.y)
W. Kluge. Abstract Computing Machines. A Lambda Calculus Perspective. Springer, 2005.
Copyright © 2014 Barry Watson. All rights reserved.