User:Thepigdog/Lambda Calculus (old)
From Wikipedia, the free encyclopedia
Lambda calculus (also written as λ-calculus or called "the lambda calculus") is a formal system in mathematical logic and computer science for expressing computation using variable binding and substitution. First formulated by Alonzo Church, lambda calculus found early successes in the area of computability theory, such as a negative answer to Hilbert's Entscheidungsproblem ("decision problem").
Lambda calculus is a simple yet Turing complete language, which can represent every computable function. Any program may be written in lambda calculus, and its execution can be understood knowing the definition of lambda calculus alone without reference to any external software environment or runtime library. Lambda calculus is functional, which allows a program written in the lambda calculus to be studied through mathematical methods. In particular parts of the program may be analyzed separately from other parts. The lambda calculus is not intended as a programming language for everyday use. However, it is valuable as a theoretical construct, and as a basis for understanding other languages.
Because of the importance of the notion of variable binding and substitution, there is not just one system of lambda calculus, and in particular there are typed and untyped variants. Historically, the most important system was the untyped lambda calculus, in which function application has no restrictions (so the notion of the domain of a function is not built into the system). In the Church–Turing Thesis, the untyped lambda calculus is claimed to be capable of computing all effectively calculable functions. The typed lambda calculus is a variety that restricts function application, so that functions can only be applied if they are capable of accepting the given input's "type" of data.
Today, the lambda calculus has applications in many different areas in mathematics, philosophy, linguistics, and computer science. It is still used in the area of computability theory, although Turing machines are also an important model for computation. Lambda calculus has played an important role in the development of the theory of programming languages. Counterparts to lambda calculus in computer science are functional programming languages, which essentially implement the calculus (augmented with some constants and datatypes). Beyond programming languages, the lambda calculus also has many applications in proof theory. A major example of this is the Curry–Howard correspondence, which gives a correspondence between different systems of typed lambda calculus and systems of formal logic.