Lab for Automated Reasoning and Analysis LARA

Lambda calculus

Lambda calculus is a notation for defining functions. It is very simple and powerful. Two of its main uses are

foundation of programming languages, especially functional languages such as Ocaml, Haskell, and Scala

higher order logic notations, such as Isabelle, HOL, PVS

For example, a function which takes its argument and increments it by 2 is given by lambda expression . The operator is a binder used to indicate that a variable is to be treated as an argument of a function. We indicate function application by juxtaposition. Here are some example expressions and their values:

Note: in Isabelle and Jahob notation we use '% x.F' or '\<lambda> x.F' to denote .F binder. In ocaml, one can use 'function x → F', and in Haskell one can use '\ x → F'.

Lambda expressions

Untyped lambda expressions are given by following grammar:

That is, an expression is a variable, a lambda expression defining a function, or an application of one expression to another.

Beta reduction

The main rule of lambda calculus is beta reduction, which formalizes function application:

where we assume capture-avoiding substitution.

One simple use of lambda expressions to introduce shorthands: instead of writing