THE 1930S

Lambda Calculus

When Alonzo Church published his work on lambda calculus in the 1930s at Princeton, he probably had no idea of the monumental impact his creation would have on the future of computing. This mathematical formalism, austere in appearance, conceals an elegance that still fascinates researchers nearly a century later.

The story truly begins with a remark by Frege in 1893: any function with multiple arguments transforms into a sequence of functions with a single argument. Take an addition function: instead of directly computing the sum of two numbers, we first build a function that expects a first number, then returns another function that expects the second. This vision corresponds remarkably to the physical reality of computers. When the machine loads a number into memory, it is ready to associate it with any other value.

In 1924, Moses Schönfinkel discovered that two elementary functions, K and S, are sufficient to construct all others. Church later took up this idea by creating a more refined notation: the application of a function F to an argument A is simply written FA, with parentheses appearing only when necessary.

The 1930s saw major results flourish. Church and Rosser proved confluence of reductions in 1936, a fundamental mathematical property of lambda calculus, which states that the final result does not depend on the order of intermediate calculations. That same year, Alan Turing established a connection between his abstract machine and Church’s formalism—both approaches compute exactly the same functions.

Lambda calculus achieves the remarkable feat of representing natural numbers without using digits. A number n is also a function that applies another function n times to an argument. This representation, called Church encoding, makes all arithmetic operations possible. Recursive functions, pillars of modern programming, are expressed through a mechanism called fixed point.

Church then formulated his famous thesis: computable functions are those definable in his formalism. This statement links an intuitive notion to a precise mathematical concept and remains impossible to prove rigorously. Kleene strengthened it in 1936 by proving the equivalence between lambda-definable functions and Gödel’s general recursive functions.

The imprint of lambda calculus on modern computing proves profound. John McCarthy drew directly from it to create LISP in 1958, ancestor of an entire family of functional languages like Haskell or ML. These languages inherit the fundamental concepts of Church’s formalism: functions as first-class values, evaluation by reduction, sophisticated type systems.

In the 1970s, Dana Scott constructed a rigorous mathematical semantics for lambda calculus. His work gave birth to domain theory, a powerful tool for understanding and verifying programming languages.

The influence of lambda calculus also touches compiler design. The representation of programs as trees rather than linear sequences of instructions, inspired by the structure of lambda terms, optimizes memory usage—a technique still relevant in current compilers. Dependent type theory, an extension of the simple type system of the original lambda calculus, now serves as the foundation for proof assistants like Coq or Agda, tools that formally verify the validity of programs or mathematical proofs.

The concepts of lambda calculus nourish parallel architectures, web languages like JavaScript, and modern type systems. Its minimalist philosophy—everything is a function—combined with its extraordinary expressiveness makes it a valuable instrument for thinking about computer systems.