Distribution function: Difference between revisions
en>PKT Help needed: Maxwellian |
en>Nanite clarify the phase space is single-particle, not the ordinary (whole system) phase space |
||
Line 1: | Line 1: | ||
A '''typed [[lambda calculus]]''' is a typed [[formalism (mathematics)|formalism]] that uses the lambda-symbol (<math>\lambda</math>) to denote anonymous function abstraction. In this context, types are usually objects of a syntactic nature that are assigned to lambda terms; the exact nature of a type depends on the calculus considered (see kinds below). From a certain point of view, typed lambda calculi can be seen as refinements of the [[untyped lambda calculus]] but from another point of view, they can also be considered the more fundamental theory and ''untyped lambda calculus'' a special case with only one type. | |||
Typed lambda calculi are foundational [[programming languages]] and are the base of typed [[functional programming languages]] such as [[ML programming language|ML]] and [[Haskell (programming language)|Haskell]] and, more indirectly, typed [[imperative programming|imperative programming languages]]. Typed lambda calculi play an important role in the design of [[type systems]] for programming languages; here typability usually captures desirable properties of the program, e.g. the program will not cause a memory access violation. | |||
Typed lambda calculi are closely related to [[mathematical logic]] and [[proof theory]] via the [[Curry–Howard isomorphism]] and they can be considered as the [[internal language]] of classes of [[category theory|categories]], e.g. the [[simply typed lambda calculus]] is the language of [[cartesian closed category|Cartesian closed categories]] (CCCs). | |||
== Kinds of typed lambda calculi == | |||
Various typed lambda calculi have been studied. The [[simply typed lambda calculus]] has only one [[type constructor]], the arrow <math>\to</math>, and its only types are [[basic type]]s and [[function type]]s <math>\sigma\to\tau</math>. [[Dialectica interpretation|System T]] extends the simply typed lambda calculus with a type of natural numbers and higher order primitive recursion; in this system all functions provably recursive in [[Peano arithmetic]] are definable. [[System F]] allows polymorphism by using universal quantification over all types; from a logical perspective it can describe all functions that are provably total in [[second-order logic]]. Lambda calculi with [[dependent types]] are the base of [[intuitionistic type theory]], the [[calculus of constructions]] and the [[LF (logical framework)|logical framework]] (LF), a pure lambda calculus with dependent types. Based on work by Berardi on [[pure type system]]s, [[Barendregt]] proposed the [[Lambda cube]] to systematize the relations of pure typed lambda calculi (including simply typed lambda calculus, System F, LF and the calculus of constructions). | |||
Some typed lambda calculi introduce a notion of ''[[subtype|subtyping]]'', i.e. if <math>A</math> is a subtype of <math>B</math>, then all terms of type <math>A</math> also have type <math>B</math>. Typed lambda calculi with subtyping are the simply typed lambda calculus with conjunctive types and [[System F-sub|System F<sub><:</sub>]]. | |||
All the systems mentioned so far, with the exception of the untyped lambda calculus, are ''[[strongly normalizing]]'': all computations terminate. As a consequence they are consistent as a logic, i.e. there are uninhabited types. There exist, however, typed lambda calculi that are not strongly normalizing. For example the dependently typed lambda calculus with a type of all types (Type : Type) is not normalizing due to [[Girard's paradox]]. This system is also the simplest pure type system, a formalism which generalizes the [[Lambda cube]]. Systems with explicit recursion combinators, such as [[Gordon Plotkin|Plotkin's]] PCF, are not normalizing, but they are not intended to be interpreted as a logic. Indeed, [[Programming language for Computable Functions|PCF]] (for Programming language for Computable Functions) is a prototypical, typed functional programming language, where types are used to ensure that programs are well-behaved but not necessarily terminating. | |||
== Applications to programming languages == | |||
In [[computer programming]], the routines (functions, procedures, methods) of [[strongly typed programming language]]s closely correspond to typed lambda expressions. [[Eiffel (programming language)|Eiffel]] has a notion of "inline agent" that makes it possible to define and manipulate typed lambda expressions directly, through such expressions as '''agent''' (p: PERSON): STRING '''do Result''' := p.spouse.name '''end''', denoting an object that represents a function which returns a person's spouse's name. | |||
== See also == | |||
* [[Kappa calculus]]—an analogue of typed lambda calculus which excludes higher-order functions | |||
== References == | |||
<references/> | |||
* Henk Barendregt, [ftp://ftp.cs.ru.nl/pub/CompMath.Found/HBK.ps Lambda Calculi with Types], Handbook of Logic in Computer Science, Volume II, Oxford University Press. | |||
{{DEFAULTSORT:Typed Lambda Calculus}} | |||
[[Category:Lambda calculus]] | |||
[[Category:Logic in computer science]] | |||
[[Category:Theory of computation]] | |||
[[Category:Type theory]] |
Revision as of 20:15, 23 January 2014
A typed lambda calculus is a typed formalism that uses the lambda-symbol () to denote anonymous function abstraction. In this context, types are usually objects of a syntactic nature that are assigned to lambda terms; the exact nature of a type depends on the calculus considered (see kinds below). From a certain point of view, typed lambda calculi can be seen as refinements of the untyped lambda calculus but from another point of view, they can also be considered the more fundamental theory and untyped lambda calculus a special case with only one type.
Typed lambda calculi are foundational programming languages and are the base of typed functional programming languages such as ML and Haskell and, more indirectly, typed imperative programming languages. Typed lambda calculi play an important role in the design of type systems for programming languages; here typability usually captures desirable properties of the program, e.g. the program will not cause a memory access violation.
Typed lambda calculi are closely related to mathematical logic and proof theory via the Curry–Howard isomorphism and they can be considered as the internal language of classes of categories, e.g. the simply typed lambda calculus is the language of Cartesian closed categories (CCCs).
Kinds of typed lambda calculi
Various typed lambda calculi have been studied. The simply typed lambda calculus has only one type constructor, the arrow , and its only types are basic types and function types . System T extends the simply typed lambda calculus with a type of natural numbers and higher order primitive recursion; in this system all functions provably recursive in Peano arithmetic are definable. System F allows polymorphism by using universal quantification over all types; from a logical perspective it can describe all functions that are provably total in second-order logic. Lambda calculi with dependent types are the base of intuitionistic type theory, the calculus of constructions and the logical framework (LF), a pure lambda calculus with dependent types. Based on work by Berardi on pure type systems, Barendregt proposed the Lambda cube to systematize the relations of pure typed lambda calculi (including simply typed lambda calculus, System F, LF and the calculus of constructions).
Some typed lambda calculi introduce a notion of subtyping, i.e. if is a subtype of , then all terms of type also have type . Typed lambda calculi with subtyping are the simply typed lambda calculus with conjunctive types and System F<:.
All the systems mentioned so far, with the exception of the untyped lambda calculus, are strongly normalizing: all computations terminate. As a consequence they are consistent as a logic, i.e. there are uninhabited types. There exist, however, typed lambda calculi that are not strongly normalizing. For example the dependently typed lambda calculus with a type of all types (Type : Type) is not normalizing due to Girard's paradox. This system is also the simplest pure type system, a formalism which generalizes the Lambda cube. Systems with explicit recursion combinators, such as Plotkin's PCF, are not normalizing, but they are not intended to be interpreted as a logic. Indeed, PCF (for Programming language for Computable Functions) is a prototypical, typed functional programming language, where types are used to ensure that programs are well-behaved but not necessarily terminating.
Applications to programming languages
In computer programming, the routines (functions, procedures, methods) of strongly typed programming languages closely correspond to typed lambda expressions. Eiffel has a notion of "inline agent" that makes it possible to define and manipulate typed lambda expressions directly, through such expressions as agent (p: PERSON): STRING do Result := p.spouse.name end, denoting an object that represents a function which returns a person's spouse's name.
See also
- Kappa calculus—an analogue of typed lambda calculus which excludes higher-order functions
References
- Henk Barendregt, Lambda Calculi with Types, Handbook of Logic in Computer Science, Volume II, Oxford University Press.