About λ-calculus
λ-calculus
is a formal system of mathematic logic
formalization of mathematical, pure, functions
invented in 1932 by Alonzo Church @Princeton
is computationally equivalent to a Turing Machine
Church-Turing thesis: effective calculations and equivalence between λc, TM and combinatory logic, later also, μ-recursive functions, rewrite systems, etc.
λ-calculus syntax
the syntax consists of just 3 constructs 1. variables
x, y, z,...
2. λ-abstractionλx.M
3. applicationM N
Associativity, precedence, conventions
application has the highest precedence
applications associate to the left,
a b c d
is((a b) c) d
λ-abstractions associate to the right,
λa. λb. M
isλa. (λb. M)
by convention, multiple binders are merged,
λa.λb.b
becomesλab.b
use of parenthesis is reduced if λ-terms are unambiguous
λa. λb. λc. λd. a b c d
isλa. λb. λc. λd. a b c d
λf. λx. (f (x x) (λh. λg. λy. (h y (g y)) (f (x x) y)))
everything is achieved through function definitions and applications
all functions are anonymous and unary
λ-abstraction refers to an anonymous function, i.e. function definition
λ-application refers to applying a function to its argument
λ-term refers to any of the 3 elementary syntactic elements
λ-expression refers to any lambda expression
completely devoid of (pre-defined) objects
There are only 2 basic rules: how to define and apply functions
defining a new function is called lambda abstraction
applying a function to an argument is called lambda application
an argument can only be another function (only functions exist)
functions are anonymous; external name binding is not available
functions are unary; they must declare one formal parameter
Function Abstraction
in PLs known as a function definition (or function declaration)
like in many PL, a function definition consists of the header and the body
the function's header may contain:
a mark (keyword or symbol) that a new function definition follows. Or, the form of a function definition is distinguishable enough from other language constructs to serve as its own introductory mark.
possible identifier of the function i.e. function's name
ordered list of formal parameters with their names and, possibly, types
the return type; the type of function's return value
function part is a function's signature; it identifies a function by:
lambda abstraction = function definition
function application: function is not "called", it is applied to an argument
lambda abstraction uses the greek letter lambda to introduce a new definition of a function (some nominal PL use keywords:
function
,fn
,func
,fun
)lambda functions are unary (they accept a single argument at the time)
lambdas are never syntactically nullary, but may be semantically (by discarding a declared parameter)
the body of a lambda is an, implicitly returned, expression
application may trigger evaluation process
evaluation may "return" ("yield") a new lambda expression
Last updated
Was this helpful?