Terms (M, N, \ldots) in the De Bruijn notation are either variables (v), or have one of two
wagon prefixes. The
abstractor wagon, written [v], corresponds to the usual λ-binder of the
λ calculus, and the
applicator wagon, written (M), corresponds to the argument in an application in the λ calculus. :M,N,... ::=\ v\ |\ [v]\;M\ |\ (M)\;N Terms in the traditional syntax can be converted to the De Bruijn notation by defining an inductive function \mathcal{I} for which: \begin{align} \mathcal{I}(v) &= v \\ \mathcal{I}(\lambda v.\ M) &= [v]\;\mathcal{I}(M) \\ \mathcal{I}(M\;N) &= (\mathcal{I}(N))\mathcal{I}(M). \end{align} All operations on λ-terms commute with respect to the \mathcal{I} translation. For example, the usual β-reduction, :(\lambda v.\ M)\;N\ \ \longrightarrow_\beta\ \ M[v := N] in the De Bruijn notation is, predictably, :(N)\;[v]\;M\ \ \longrightarrow_\beta\ \ M[v := N]. A feature of this notation is that abstractor and applicator wagons of β-redexes are paired like parentheses. For example, consider the stages in the β-reduction of the term (M)\;(N)\;[u]\;(P)\;[v]\;[w]\;(Q)\;z, where the redexes are underlined: \begin{align} (M)\;\underline{(N)\;[u]}\;(P)\;[v]\;[w]\;(Q)\;z &{\ \longrightarrow_\beta\ } (M)\;\underline{(P[u:=N])\;[v]}\;[w]\;(Q[u:=N])\;z \\ &{\ \longrightarrow_\beta\ } \underline{(M)\;[w]}\;(Q[u:=N,v:=P[u:=N)\;z \\ &{\ \longrightarrow_\beta\ } (Q[u:=N,v:=P[u:=N],w:=M])\;z. \end{align} Thus, if one views the applicator as an open paren ('(') and the abstractor as a close bracket (']'), then the pattern in the above term is '((]('. De Bruijn called an applicator and its corresponding abstractor in this interpretation
partners, and wagons without partners
bachelors. A sequence of wagons, which he called a
segment, is
well balanced if all its wagons are partnered. == Advantages of the De Bruijn notation ==