![Type theory](https://www.english.nina.az/image-resize/1600/900/web/wikipedia.jpg)
In mathematics and theoretical computer science, a type theory is the formal presentation of a specific type system. Type theory is the academic study of type systems.
Some type theories serve as alternatives to set theory as a foundation of mathematics. Two influential type theories that have been proposed as foundations are:
Most computerized proof-writing systems use a type theory for their foundation. A common one is Thierry Coquand's Calculus of Inductive Constructions.
History
Type theory was created to avoid a paradox in a mathematical equation[which?] based on naive set theory and formal logic. Russell's paradox (first described in Gottlob Frege's The Foundations of Arithmetic) is that, without proper axioms, it is possible to define the set of all sets that are not members of themselves; this set both contains itself and does not contain itself. Between 1902 and 1908, Bertrand Russell proposed various solutions to this problem.
By 1908, Russell arrived at a ramified theory of types together with an axiom of reducibility, both of which appeared in Whitehead and Russell's Principia Mathematica published in 1910, 1912, and 1913. This system avoided contradictions suggested in Russell's paradox by creating a hierarchy of types and then assigning each concrete mathematical entity to a specific type. Entities of a given type were built exclusively of subtypes of that type, thus preventing an entity from being defined using itself. This resolution of Russell's paradox is similar to approaches taken in other formal systems, such as Zermelo-Fraenkel set theory.
Type theory is particularly popular in conjunction with Alonzo Church's lambda calculus. One notable early example of type theory is Church's simply typed lambda calculus. Church's theory of types helped the formal system avoid the Kleene–Rosser paradox that afflicted the original untyped lambda calculus. Church demonstrated that it could serve as a foundation of mathematics and it was referred to as a higher-order logic.
In the modern literature, "type theory" refers to a typed system based around lambda calculus. One influential system is Per Martin-Löf's intuitionistic type theory, which was proposed as a foundation for constructive mathematics. Another is Thierry Coquand's calculus of constructions, which is used as the foundation by Coq, Lean, and other computer proof assistants. Type theory is an active area of research, one direction being the development of homotopy type theory.
Applications
This section needs expansion. You can help by adding to it. (May 2008) |
Mathematical foundations
The first computer proof assistant, called Automath, used type theory to encode mathematics on a computer. Martin-Löf specifically developed intuitionistic type theory to encode all mathematics to serve as a new foundation for mathematics. There is ongoing research into mathematical foundations using homotopy type theory.
Mathematicians working in category theory already had difficulty working with the widely accepted foundation of Zermelo–Fraenkel set theory. This led to proposals such as Lawvere's Elementary Theory of the Category of Sets (ETCS). Homotopy type theory continues in this line using type theory. Researchers are exploring connections between dependent types (especially the identity type) and algebraic topology (specifically homotopy).
Proof assistants
Much of the current research into type theory is driven by proof checkers, interactive proof assistants, and automated theorem provers. Most of these systems use a type theory as the mathematical foundation for encoding proofs, which is not surprising, given the close connection between type theory and programming languages:
- LF is used by Twelf, often to define other type theories;
- many type theories which fall under higher-order logic are used by the HOL family of provers and PVS;
- computational type theory is used by NuPRL;
- calculus of constructions and its derivatives are used by Coq, Matita, and Lean;
- UTT (Luo's Unified Theory of dependent Types) is used by Agda which is both a programming language and proof assistant
Many type theories are supported by LEGO and Isabelle. Isabelle also supports foundations besides type theories, such as ZFC. Mizar is an example of a proof system that only supports set theory.
Programming languages
Any static program analysis, such as the type checking algorithms in the semantic analysis phase of compiler, has a connection to type theory. A prime example is Agda, a programming language which uses UTT (Luo's Unified Theory of dependent Types) for its type system.
The programming language ML was developed for manipulating type theories (see LCF) and its own type system was heavily influenced by them.
Linguistics
Type theory is also widely used in formal theories of semantics of natural languages, especially Montague grammar and its descendants. In particular, categorial grammars and pregroup grammars extensively use type constructors to define the types (noun, verb, etc.) of words.
The most common construction takes the basic types and
for individuals and truth-values, respectively, and defines the set of types recursively as follows:
- if
and
are types, then so is
;
- nothing except the basic types, and what can be constructed from them by means of the previous clause are types.
A complex type is the type of functions from entities of type
to entities of type
. Thus one has types like
which are interpreted as elements of the set of functions from entities to truth-values, i.e. indicator functions of sets of entities. An expression of type
is a function from sets of entities to truth-values, i.e. a (indicator function of a) set of sets. This latter type is standardly taken to be the type of natural language quantifiers, like everybody or nobody (Montague 1973, Barwise and Cooper 1981).
Type theory with records is a formal semantics representation framework, using records to express type theory types. It has been used in natural language processing, principally computational semantics and dialogue systems.
Social sciences
Gregory Bateson introduced a theory of logical types into the social sciences; his notions of double bind and logical levels are based on Russell's theory of types.
Logic
A type theory is a mathematical logic, which is to say it is a collection of rules of inference that result in judgments. Most logics have judgments asserting "The proposition is true", or "The formula
is a well-formed formula". A type theory has judgments that define types and assign them to a collection of formal objects, known as terms. A term and its type are often written together as
.
Terms
A term in logic is recursively defined as a constant symbol, variable, or a function application, where a term is applied to another term. Constant symbols could include the natural number , the Boolean value
, and functions such as the successor function
and conditional operator
. Thus some terms could be
,
,
, and
.
Judgments
Most type theories have 4 judgments:
- "
is a type"
- "
is a term of type
"
- "Type
is equal to type
"
- "Terms
and
both of type
are equal"
Judgments may follow from assumptions. For example, one might say "assuming is a term of type
and
is a term of type
, it follows that
is a term of type
". Such judgments are formally written with the turnstile symbol
.
If there are no assumptions, there will be nothing to the left of the turnstile.
The list of assumptions on the left is the context of the judgment. Capital greek letters, such as and
, are common choices to represent some or all of the assumptions. The 4 different judgments are thus usually written as follows.
Formal notation for judgments | Description |
---|---|
Type | |
Terms |
Some textbooks use a triple equal sign to stress that this is judgmental equality and thus an extrinsic notion of equality. The judgments enforce that every term has a type. The type will restrict which rules can be applied to a term.
Rules of Inference
A type theory's inference rules say what judgments can be made, based on the existence of other judgments. Rules are expressed as a Gentzen-style deduction using a horizontal line, with the required input judgments above the line and the resulting judgment below the line. For example, the following inference rule states a substitution rule for judgmental equality.The rules are syntactic and work by rewriting. The metavariables
,
,
,
, and
may actually consist of complex terms and types that contain many function applications, not just single symbols.
To generate a particular judgment in type theory, there must be a rule to generate it, as well as rules to generate all of that rule's required inputs, and so on. The applied rules form a proof tree, where the top-most rules need no assumptions. One example of a rule that does not require any inputs is one that states the type of a constant term. For example, to assert that there is a term of type
, one would write the following.
Type inhabitation
Generally, the desired conclusion of a proof in type theory is one of type inhabitation. The decision problem of type inhabitation (abbreviated by ) is:
- Given a context
and a type
, decide whether there exists a term
that can be assigned the type
in the type environment
.
Girard's paradox shows that type inhabitation is strongly related to the consistency of a type system with Curry–Howard correspondence. To be sound, such a system must have uninhabited types.
A type theory usually has several rules, including ones to:
- create a judgment (known as a context in this case)
- add an assumption to the context (context weakening)
- rearrange the assumptions
- use an assumption to create a variable
- define reflexivity, symmetry and transitivity for judgmental equality
- define substitution for application of lambda terms
- list all the interactions of equality, such as substitution
- define a hierarchy of type universes
- assert the existence of new types
Also, for each "by rule" type, there are 4 different kinds of rules
- "type formation" rules say how to create the type
- "term introduction" rules define the canonical terms and constructor functions, like "pair" and "S".
- "term elimination" rules define the other functions like "first", "second", and "R".
- "computation" rules specify how computation is performed with the type-specific functions.
For examples of rules, an interested reader may follow Appendix A.2 of the Homotopy Type Theory book, or read Martin-Löf's Intuitionistic Type Theory.
Connections to foundations
The logical framework of a type theory bears a resemblance to intuitionistic, or constructive, logic. Formally, type theory is often cited as an implementation of the Brouwer–Heyting–Kolmogorov interpretation of intuitionistic logic. Additionally, connections can be made to category theory and computer programs.
Intuitionistic logic
When used as a foundation, certain types are interpreted to be propositions (statements that can be proven), and terms inhabiting the type are interpreted to be proofs of that proposition. When some types are interpreted as propositions, there is a set of common types that can be used to connect them to make a Boolean algebra out of types. However, the logic is not classical logic but intuitionistic logic, which is to say it does not have the law of excluded middle nor double negation.
Under this intuitionistic interpretation, there are common types that act as the logical operators:
Logic Name | Logic Notation | Type Notation | Type Name |
---|---|---|---|
True | Unit Type | ||
False | Empty Type | ||
Implication | Function | ||
Not | Function to Empty Type | ||
And | Product Type | ||
Or | Sum Type | ||
For All | Dependent Product | ||
Exists | Dependent Sum |
Because the law of excluded middle does not hold, there is no term of type . Likewise, double negation does not hold, so there is no term of type
.
It is possible to include the law of excluded middle and double negation into a type theory, by rule or assumption. However, terms may not compute down to canonical terms and it will interfere with the ability to determine if two terms are judgementally equal to each other.[citation needed]
Constructive mathematics
Per Martin-Löf proposed his intuitionistic type theory as a foundation for constructive mathematics. Constructive mathematics requires when proving "there exists an with property
", one must construct a particular
and a proof that it has property
. In type theory, existence is accomplished using the dependent product type, and its proof requires a term of that type.
An example of a non-constructive proof is proof by contradiction. The first step is assuming that does not exist and refuting it by contradiction. The conclusion from that step is "it is not the case that
does not exist". The last step is, by double negation, concluding that
exists. Constructive mathematics does not allow the last step of removing the double negation to conclude that
exists.
Most of the type theories proposed as foundations are constructive, and this includes most of the ones used by proof assistants.[citation needed] It is possible to add non-constructive features to a type theory, by rule or assumption. These include operators on continuations such as call with current continuation. However, these operators tend to break desirable properties such as and parametricity.
Curry-Howard correspondence
The Curry–Howard correspondence is the observed similarity between logics and programming languages. The implication in logic, "A B" resembles a function from type "A" to type "B". For a variety of logics, the rules are similar to expressions in a programming language's types. The similarity goes farther, as applications of the rules resemble programs in the programming languages. Thus, the correspondence is often summarized as "proofs as programs".
The opposition of terms and types can also be viewed as one of implementation and specification. By program synthesis, (the computational counterpart of) type inhabitation can be used to construct (all or parts of) programs from the specification given in the form of type information.
Type inference
Many programs that work with type theory (e.g., interactive theorem provers) also do type inferencing. It lets them select the rules that the user intends, with fewer actions by the user.
Research areas
Category theory
Although the initial motivation for category theory was far removed from foundationalism, the two fields turned out to have deep connections. As John Lane Bell writes: "In fact categories can themselves be viewed as type theories of a certain kind; this fact alone indicates that type theory is much more closely related to category theory than it is to set theory." In brief, a category can be viewed as a type theory by regarding its objects as types (or sorts), i.e. "Roughly speaking, a category may be thought of as a type theory shorn of its syntax." A number of significant results follow in this way:
- cartesian closed categories correspond to the typed λ-calculus (Lambek, 1970);
- (categories with products and exponentials and one non-terminal object) correspond to the untyped λ-calculus (observed independently by Lambek and Dana Scott around 1980);
- locally cartesian closed categories correspond to Martin-Löf type theories (Seely, 1984).
The interplay, known as categorical logic, has been a subject of active research since then; see the monograph of Jacobs (1999) for instance.
Homotopy type theory
Homotopy type theory attempts to combine type theory and category theory. It focuses on equalities, especially equalities between types. Homotopy type theory differs from intuitionistic type theory mostly by its handling of the equality type. In 2016, was proposed, which is a homotopy type theory with normalization.
Definitions
Terms and types
Atomic terms
The most basic types are called atoms, and a term whose type is an atom is known as an atomic term. Common atomic terms included in type theories are natural numbers, often notated with the type , Boolean logic values (
/
), notated with the type
, and formal variables, whose type may vary. For example, the following may be atomic terms.
Function terms
In addition to atomic terms, most modern type theories also allow for functions. Function types introduce an arrow symbol, and are defined inductively: If and
are types, then the notation
is the type of a function which takes a parameter of type
and returns a term of type
. Types of this form are known as simple types.
Some terms may be declared directly as having a simple type, such as the following term, , which takes in two natural numbers in sequence and returns one natural number.
Strictly speaking, a simple type only allows for one input and one output, so a more faithful reading of the above type is that is a function which takes in a natural number and returns a function of the form
. The parentheses clarify that
does not have the type
, which would be a function which takes in a function of natural numbers and returns a natural number. The convention is that the arrow is right associative, so the parentheses may be dropped from
's type.
Lambda terms
New function terms may be constructed using lambda expressions, and are called lambda terms. These terms are also defined inductively: a lambda term has the form , where
is a formal variable and
is a term, and its type is notated
, where
is the type of
, and
is the type of
. The following lambda term represents a function which doubles an input natural number.
The variable is and (implicit from the lambda term's type) must have type
. The term
has type
, which is seen by applying the function application inference rule twice. Thus, the lambda term has type
, which means it is a function taking a natural number as an argument and returning a natural number.
A lambda term is often referred to as an anonymous function because it lacks a name. The concept of anonymous functions appears in many programming languages.
Inference Rules
Function application
The power of type theories is in specifying how terms may be combined by way of inference rules. Type theories which have functions also have the inference rule of function application: if is a term of type
, and
is a term of type
, then the application of
to
, often written
, has type
. For example, if one knows the type notations
,
, and
, then the following type notations can be deduced from function application.
Parentheses indicate the order of operations; however, by convention, function application is left associative, so parentheses can be dropped where appropriate. In the case of the three examples above, all parentheses could be omitted from the first two, and the third may simplified to .
Reductions
Type theories that allow for lambda terms also include inference rules known as -reduction and
-reduction. They generalize the notion of function application to lambda terms. Symbolically, they are written
(
-reduction).
, if
is not a free variable in
(
-reduction).
The first reduction describes how to evaluate a lambda term: if a lambda expression is applied to a term
, one replaces every occurrence of
in
with
. The second reduction makes explicit the relationship between lambda expressions and function types: if
is a lambda term, then it must be that
is a function term because it is being applied to
. Therefore, the lambda expression is equivalent to just
, as both take in one argument and apply
to it.
For example, the following term may be -reduced.
In type theories that also establish notions of equality for types and terms, there are corresponding inference rules of -equality and
-equality.
Common terms and types
Empty type
The empty type has no terms. The type is usually written or
. One use for the empty type is proofs of type inhabitation. If for a type
, it is consistent to derive a function of type
, then
is uninhabited, which is to say it has no terms.
Unit type
The unit type has exactly 1 canonical term. The type is written or
and the single canonical term is written
. The unit type is also used in proofs of type inhabitation. If for a type
, it is consistent to derive a function of type
, then
is inhabited, which is to say it must have one or more terms.
Boolean type
The Boolean type has exactly 2 canonical terms. The type is usually written or
or
. The canonical terms are usually
and
.
Natural numbers
Natural numbers are usually implemented in the style of Peano Arithmetic. There is a canonical term for zero. Canonical values larger than zero use iterated applications of a successor function
.
Dependent typing
Some type theories allow for types of complex terms, such as functions or lists, to depend on the types of its arguments. For example, a type theory could have the dependent type , which should correspond to lists of terms, where each term must have type
. In this case,
has the type
, where
denotes the universe of all types in the theory.
Some theories also permit types to be dependent on terms instead of types. For example, a theory could have the type , where
is a term of type
encoding the length of the vector. This allows for greater specificity and type safety: functions with vector length restrictions or length matching requirements, such as the dot product, can encode this requirement as part of the type.
There are foundational issues that can arise from dependent types if a theory is not careful about what dependencies are allowed, such as Girard's Paradox. The logician Henk Barendegt introduced the lambda cube as a framework for studying various restrictions and levels of dependent typing.
Product type
The product type depends on two types, and its terms are commonly written as ordered pairs or with the symbol
. The pair
has the product type
, where
is the type of
and
is the type of
. The product type is usually defined with eliminator functions
and
.
returns
, and
returns
.
Besides ordered pairs, this type is used for the concepts of logical conjunction and intersection.
Sum type
The sum type depends on two types, and it is commonly written with the symbol or
. In programming languages, sum types may be referred to as tagged unions. The type
is usually defined with constructors
and
, which are injective, and an eliminator function
such that
returns
, and
returns
.
The sum type is used for the concepts of logical disjunction and union.
Dependent products and sums
Two common type dependencies, dependent product and dependent sum types, allow for the theory to encode BHK intuitionistic logic by acting as equivalents to universal and existential quantification; this is formalized by Curry–Howard Correspondence. As they also connect to products and sums in set theory, they are often written with the symbols and
, respectively. Dependent product and sum types commonly appear in function types and are frequently incorporated in programming languages.
For example, consider a function , which takes in a
and a term of type
, and returns the list with the element at the end. The type annotation of such a function would be
, which can be read as "for any type
, pass in a
and an
, and return a
".
Sum types are seen in dependent pairs, where the second type depends on the value of the first term. This arises naturally in computer science where functions may return different types of outputs based on the input. For example, the Boolean type is usually defined with an eliminator function , which takes three arguments and behaves as follows.
returns
, and
returns
.
The return type of this function depends on its input. If the type theory allows for dependent types, then it is possible to define a function
such that
returns
, and
returns
.
The type of may then be written as
.
Identity type
Following the notion of Curry-Howard Correspondence, the identity type is a type introduced to mirror propositional equivalence, as opposed to the judgmental (syntactic) equivalence that type theory already provides.
An identity type requires two terms of the same type and is written with the symbol . For example, if
and
are terms, then
is a possible type. Canonical terms are created with a reflexivity function,
. For a term
, the call
returns the canonical term inhabiting the type
.
The complexities of equality in type theory make it an active research topic; homotopy type theory is a notable area of research that mainly deals with equality in type theory.
Inductive types
Inductive types are a general template for creating a large variety of types. In fact, all the types described above and more can be defined using the rules of inductive types. Two methods of generating inductive types are induction-recursion and induction-induction. A method that only uses lambda terms is Scott encoding.
Some proof assistants, such as Coq and Lean, are based on the calculus for inductive constructions, which is a calculus of constructions with inductive types.
Differences from set theory
The most commonly accepted foundation for mathematics is first-order logic with the language and axioms of Zermelo–Fraenkel set theory with the axiom of choice, abbreviated ZFC. Type theories having sufficient expressibility may also act as a foundation of mathematics. There are a number of differences between these two approaches.
- Set theory has both rules and axioms, while type theories only have rules. Type theories, in general, do not have axioms and are defined by their rules of inference.
- Classical set theory and logic have the law of excluded middle. When a type theory encodes the concepts of "and" and "or" as types, it leads to intuitionistic logic, and does not necessarily have the law of excluded middle.
- In set theory, an element is not restricted to one set. The element can appear in subsets and unions with other sets. In type theory, terms (generally) belong to only one type. Where a subset would be used, type theory can use a predicate function or use a dependently-typed product type, where each element
is paired with a proof that the subset's property holds for
. Where a union would be used, type theory uses the sum type, which contains new canonical terms.
- Type theory has a built-in notion of computation. Thus, "1+1" and "2" are different terms in type theory, but they compute to the same value. Moreover, functions are defined computationally as lambda terms. In set theory, "1+1=2" means that "1+1" is just another way to refer the value "2". Type theory's computation does require a complicated concept of equality.
- Set theory encodes numbers as sets. Type theory can encode numbers as functions using Church encoding, or more naturally as inductive types, and the construction closely resembles Peano's axioms.
- In type theory, proofs are types whereas in set theory, proofs are part of the underlying first-order logic.
Proponents of type theory will also point out its connection to constructive mathematics through the BHK interpretation, its connection to logic by the Curry–Howard isomorphism, and its connections to Category theory.
Properties of type theories
Terms usually belong to a single type. However, there are set theories that define "subtyping".
Computation takes place by repeated application of rules. Many types of theories are strongly normalizing, which means that any order of applying the rules will always end in the same result. However, some are not. In a normalizing type theory, the one-directional computation rules are called "reduction rules", and applying the rules "reduces" the term. If a rule is not one-directional, it is called a "conversion rule".
Some combinations of types are equivalent to other combinations of types. When functions are considered "exponentiation", the combinations of types can be written similarly to algebraic identities. Thus, ,
,
,
,
.
Axioms
Most type theories do not have axioms. This is because a type theory is defined by its rules of inference. This is a source of confusion for people familiar with Set Theory, where a theory is defined by both the rules of inference for a logic (such as first-order logic) and axioms about sets.
Sometimes, a type theory will add a few axioms. An axiom is a judgment that is accepted without a derivation using the rules of inference. They are often added to ensure properties that cannot be added cleanly through the rules.
Axioms can cause problems if they introduce terms without a way to compute on those terms. That is, axioms can interfere with the normalizing property of the type theory.
Some commonly encountered axioms are:
- "Axiom K" ensures "uniqueness of identity proofs". That is, that every term of an identity type is equal to reflexivity.
- "Univalence Axiom" holds that equivalence of types is equality of types. The research into this property led to , where the property holds without needing an axiom.
- "Law of Excluded Middle" is often added to satisfy users who want classical logic, instead of intuitionistic logic.
The Axiom of Choice does not need to be added to type theory, because in most type theories it can be derived from the rules of inference. This is because of the constructive nature of type theory, where proving that a value exists requires a method to compute the value. The Axiom of Choice is less powerful in type theory than most set theories, because type theory's functions must be computable and, being syntax-driven, the number of terms in a type must be countable. (See Axiom of choice § In constructive mathematics.)
List of type theories
Major
- Simply typed lambda calculus which is a higher-order logic
- intuitionistic type theory
- system F
- LF is often used to define other type theories
- calculus of constructions and its derivatives
Minor
- Automath
- ST type theory
- UTT (Luo's Unified Theory of dependent Types)
- some forms of combinatory logic
- others defined in the lambda cube (also known as pure type systems)
- others under the name typed lambda calculus
Active research
- Homotopy type theory explores equality of types
- Cubical Type Theory is an implementation of homotopy type theory
See also
- Class (set theory)
- Logic
- Type–token distinction
Further reading
- Aarts, C.; Backhouse, R.; Hoogendijk, P.; Voermans, E.; van der Woude, J. (December 1992). "A Relational Theory of Datatypes". Technische Universiteit Eindhoven.
- Andrews B., Peter (2002). An Introduction to Mathematical Logic and Type Theory: To Truth Through Proof (2nd ed.). Kluwer. ISBN 978-1-4020-0763-7.
- Jacobs, Bart (1999). Categorical Logic and Type Theory. Studies in Logic and the Foundations of Mathematics. Vol. 141. Elsevier. ISBN 978-0-444-50170-7. Archived from the original on 2023-08-10. Retrieved 2020-07-19. Covers type theory in depth, including polymorphic and dependent type extensions. Gives categorical semantics.
- Cardelli, Luca (1996). "Type Systems". In Tucker, Allen B. (ed.). The Computer Science and Engineering Handbook. CRC Press. pp. 2208–36. ISBN 9780849329098. Archived from the original on 2008-04-10. Retrieved 2004-06-26.
- Collins, Jordan E. (2012). A History of the Theory of Types: Developments After the Second Edition of 'Principia Mathematica'. Lambert Academic Publishing. hdl:11375/12315. ISBN 978-3-8473-2963-3. Provides a historical survey of the developments of the theory of types with a focus on the decline of the theory as a foundation of mathematics over the four decades following the publication of the second edition of 'Principia Mathematica'.
- Constable, Robert L. (2012) [2002]. "Naïve Computational Type Theory" (PDF). In Schwichtenberg, H.; Steinbruggen, R. (eds.). Proof and System-Reliability. Nato Science Series II. Vol. 62. Springer. pp. 213–259. ISBN 9789401004138. Archived (PDF) from the original on 2022-10-09. Intended as a type theory counterpart of Paul Halmos's (1960) Naïve Set Theory
- Coquand, Thierry (2018) [2006]. "Type Theory". Stanford Encyclopedia of Philosophy.
- Thompson, Simon (1991). Type Theory and Functional Programming. Addison–Wesley. ISBN 0-201-41667-0. Archived from the original on 2021-03-23. Retrieved 2006-04-03.
- Hindley, J. Roger (2008) [1995]. Basic Simple Type Theory. Cambridge University Press. ISBN 978-0-521-05422-5. A good introduction to simple type theory for computer scientists; the system described is not exactly Church's STT though. Book review Archived 2011-06-07 at the Wayback Machine
- Kamareddine, Fairouz D.; Laan, Twan; Nederpelt, Rob P. (2004). A modern perspective on type theory: from its origins until today. Springer. ISBN 1-4020-2334-0.
- Ferreirós, José; Domínguez, José Ferreirós (2007). "X. Logic and Type Theory in the Interwar Period". Labyrinth of thought: a history of set theory and its role in modern mathematics (2nd ed.). Springer. ISBN 978-3-7643-8349-7.
- Laan, T.D.L. (1997). The evolution of type theory in logic and mathematics (PDF) (PhD). Eindhoven University of Technology. doi:10.6100/IR498552. ISBN 90-386-0531-5. Archived (PDF) from the original on 2022-10-09.
- Montague, R. (1973) "The proper treatment of quantification in ordinary English". In K. J. J. Hintikka, J. M. E. Moravcsik, and P. Suppes (eds.), Approaches to Natural Language (Synthese Library, 49), Dordrecht: Reidel, 221–242; reprinted in Portner and Partee (eds.) 2002, pp. 17–35. See: Montague Semantics, Stanford Encyclopedia of Philosophy.
Notes
- See § Terms and types
- In Julia's type system, for example, abstract types have no instances, but can have subtype,: 110 whereas concrete types do not have subtypes but can have instances, for "documentation, optimization, and dispatch".
- Church demonstrated his logistic method with his simple theory of types, and explained his method in 1956, pages 47-68.
- In Julia, for example, a function with no name, but with two parameters in some tuple (x,y) can be denoted by say,
(x,y) -> x^5+y
, as an anonymous function.
References
- Balbaert, Ivo (2015) Getting Started With Julia Programming ISBN 978-1-78328-479-5
- docs.julialang.org v.1 Types Archived 2022-03-24 at the Wayback Machine
- Stanford Encyclopedia of Philosophy (rev. Mon Oct 12, 2020) Russell’s Paradox Archived December 18, 2021, at the Wayback Machine 3. Early Responses to the Paradox
- Church, Alonzo (1940). "A formulation of the simple theory of types". The Journal of Symbolic Logic. 5 (2): 56–68. doi:10.2307/2266170. JSTOR 2266170. S2CID 15889861.
- Alonzo Church (1956) Introduction To Mathematical Logic Vol 1
- ETCS at the nLab
- Chatzikyriakidis, Stergios; Luo, Zhaohui (2017-02-07). Modern Perspectives in Type-Theoretical Semantics. Springer. ISBN 978-3-319-50422-3. Archived from the original on 2023-08-10. Retrieved 2022-07-29.
- Winter, Yoad (2016-04-08). Elements of Formal Semantics: An Introduction to the Mathematical Theory of Meaning in Natural Language. Edinburgh University Press. ISBN 978-0-7486-7777-1. Archived from the original on 2023-08-10. Retrieved 2022-07-29.
- Cooper, Robin. "Type theory and semantics in flux Archived 2022-05-10 at the Wayback Machine." Handbook of the Philosophy of Science 14 (2012): 271-323.
- Barwise, Jon; Cooper, Robin (1981) Generalized quantifiers and natural language Linguistics and Philosophy 4 (2):159--219 (1981)
- Cooper, Robin (2005). "Records and Record Types in Semantic Theory". Journal of Logic and Computation. 15 (2): 99–112. doi:10.1093/logcom/exi004.
- Cooper, Robin (2010). Type theory and semantics in flux. Handbook of the Philosophy of Science. Volume 14: Philosophy of Linguistics. Elsevier.
- Martin-Löf, Per (1987-12-01). "Truth of a proposition, evidence of a judgement, validity of a proof". Synthese. 73 (3): 407–420. doi:10.1007/BF00484985. ISSN 1573-0964.
- The Univalent Foundations Program (2013). Homotopy Type Theory: Univalent Foundations of Mathematics. Homotopy Type Theory.
- Smith, Peter. "Types of proof system" (PDF). logicmatters.net. Archived (PDF) from the original on 2022-10-09. Retrieved 29 December 2021.
- Henk Barendregt; Wil Dekkers; Richard Statman (20 June 2013). Lambda Calculus with Types. Cambridge University Press. pp. 1–66. ISBN 978-0-521-76614-2.
- "Rules to Martin-Löf's Intuitionistic Type Theory" (PDF). Archived (PDF) from the original on 2021-10-21. Retrieved 2022-01-22.
- "proof by contradiction". nlab. Archived from the original on 13 August 2023. Retrieved 29 December 2021.
- Heineman, George T.; Bessai, Jan; Düdder, Boris; Rehof, Jakob (2016). "A long and winding road towards modular synthesis". Leveraging Applications of Formal Methods, Verification and Validation: Foundational Techniques. ISoLA 2016. Lecture Notes in Computer Science. Vol. 9952. Springer. pp. 303–317. doi:10.1007/978-3-319-47166-2_21. ISBN 978-3-319-47165-5.
- Bell, John L. (2012). "Types, Sets and Categories" (PDF). In Kanamory, Akihiro (ed.). Sets and Extensions in the Twentieth Century. Handbook of the History of Logic. Vol. 6. Elsevier. ISBN 978-0-08-093066-4. Archived (PDF) from the original on 2018-04-17. Retrieved 2012-11-03.
- Sterling, Jonathan; Angiuli, Carlo (2021-06-29). "Normalization for Cubical Type Theory". 2021 36th Annual ACM/IEEE Symposium on Logic in Computer Science (LICS). Rome, Italy: IEEE. pp. 1–15. arXiv:2101.11479. doi:10.1109/LICS52264.2021.9470719. ISBN 978-1-6654-4895-6. S2CID 231719089. Archived from the original on 2023-08-13. Retrieved 2022-06-21.
- Cohen, Cyril; Coquand, Thierry; Huber, Simon; Mörtberg, Anders (2016). "Cubical Type Theory: A constructive interpretation of the univalence axiom" (PDF). 21st International Conference on Types for Proofs and Programs (TYPES 2015). arXiv:1611.02108. doi:10.4230/LIPIcs.CVIT.2016.23 (inactive 1 November 2024). Archived (PDF) from the original on 2022-10-09.
{{cite journal}}
: CS1 maint: DOI inactive as of November 2024 (link) - Balbaert,Ivo (2015) Getting Started with Julia
- Bove, Ana; Dybjer, Peter (2009), Bove, Ana; Barbosa, Luís Soares; Pardo, Alberto; Pinto, Jorge Sousa (eds.), "Dependent Types at Work", Language Engineering and Rigorous Software Development: International LerNet ALFA Summer School 2008, Piriapolis, Uruguay, February 24 - March 1, 2008, Revised Tutorial Lectures, Lecture Notes in Computer Science, Berlin, Heidelberg: Springer, pp. 57–99, doi:10.1007/978-3-642-03153-3_2, ISBN 978-3-642-03153-3, retrieved 2024-01-18
- Barendegt, Henk (April 1991). "Introduction to generalized type systems". Journal of Functional Programming. 1 (2): 125–154. doi:10.1017/S0956796800020025. hdl:2066/17240 – via Cambridge Core.
- Milewski, Bartosz. "Programming with Math (Exploring Type Theory)". YouTube. Archived from the original on 2022-01-22. Retrieved 2022-01-22.
- "Axioms and Computation". Theorem Proving in Lean. Archived from the original on 22 December 2021. Retrieved 21 January 2022.
- "Axiom K". nLab. Archived from the original on 2022-01-19. Retrieved 2022-01-21.
External links
Introductory material
- Type Theory at nLab, which has articles on many topics.
- Intuitionistic Type Theory article at the Stanford Encyclopedia of Philosophy
- Lambda Calculi with Types book by Henk Barendregt
- Calculus of Constructions / Typed Lambda Calculus textbook style paper by Helmut Brandl
- Intuitionistic Type Theory notes by Per Martin-Löf
- Programming in Martin-Löf's Type Theory book
- Homotopy Type Theory book, which proposed homotopy type theory as a mathematical foundation.
Advanced material
- Robert L. Constable (ed.). "Computational type theory". Scholarpedia.
- The TYPES Forum — moderated e-mail forum focusing on type theory in computer science, operating since 1987.
- The Nuprl Book: "Introduction to Type Theory."
- Types Project lecture notes of summer schools 2005–2008
- The 2005 summer school has introductory lectures
- Oregon Programming Languages Summer School, many lectures and some notes.
- Summer 2013 lectures including Robert Harper's talks on YouTube
- Summer 2015 Types, Logic, Semantics, and Verification
- Andrej Bauer's blog
In mathematics and theoretical computer science a type theory is the formal presentation of a specific type system Type theory is the academic study of type systems Some type theories serve as alternatives to set theory as a foundation of mathematics Two influential type theories that have been proposed as foundations are Typed l calculus of Alonzo Church Intuitionistic type theory of Per Martin Lof Most computerized proof writing systems use a type theory for their foundation A common one is Thierry Coquand s Calculus of Inductive Constructions HistoryType theory was created to avoid a paradox in a mathematical equation which based on naive set theory and formal logic Russell s paradox first described in Gottlob Frege s The Foundations of Arithmetic is that without proper axioms it is possible to define the set of all sets that are not members of themselves this set both contains itself and does not contain itself Between 1902 and 1908 Bertrand Russell proposed various solutions to this problem By 1908 Russell arrived at a ramified theory of types together with an axiom of reducibility both of which appeared in Whitehead and Russell s Principia Mathematica published in 1910 1912 and 1913 This system avoided contradictions suggested in Russell s paradox by creating a hierarchy of types and then assigning each concrete mathematical entity to a specific type Entities of a given type were built exclusively of subtypes of that type thus preventing an entity from being defined using itself This resolution of Russell s paradox is similar to approaches taken in other formal systems such as Zermelo Fraenkel set theory Type theory is particularly popular in conjunction with Alonzo Church s lambda calculus One notable early example of type theory is Church s simply typed lambda calculus Church s theory of types helped the formal system avoid the Kleene Rosser paradox that afflicted the original untyped lambda calculus Church demonstrated that it could serve as a foundation of mathematics and it was referred to as a higher order logic In the modern literature type theory refers to a typed system based around lambda calculus One influential system is Per Martin Lof s intuitionistic type theory which was proposed as a foundation for constructive mathematics Another is Thierry Coquand s calculus of constructions which is used as the foundation by Coq Lean and other computer proof assistants Type theory is an active area of research one direction being the development of homotopy type theory ApplicationsThis section needs expansion You can help by adding to it May 2008 Mathematical foundations The first computer proof assistant called Automath used type theory to encode mathematics on a computer Martin Lof specifically developed intuitionistic type theory to encode all mathematics to serve as a new foundation for mathematics There is ongoing research into mathematical foundations using homotopy type theory Mathematicians working in category theory already had difficulty working with the widely accepted foundation of Zermelo Fraenkel set theory This led to proposals such as Lawvere s Elementary Theory of the Category of Sets ETCS Homotopy type theory continues in this line using type theory Researchers are exploring connections between dependent types especially the identity type and algebraic topology specifically homotopy Proof assistants Much of the current research into type theory is driven by proof checkers interactive proof assistants and automated theorem provers Most of these systems use a type theory as the mathematical foundation for encoding proofs which is not surprising given the close connection between type theory and programming languages LF is used by Twelf often to define other type theories many type theories which fall under higher order logic are used by the HOL family of provers and PVS computational type theory is used by NuPRL calculus of constructions and its derivatives are used by Coq Matita and Lean UTT Luo s Unified Theory of dependent Types is used by Agda which is both a programming language and proof assistant Many type theories are supported by LEGO and Isabelle Isabelle also supports foundations besides type theories such as ZFC Mizar is an example of a proof system that only supports set theory Programming languages Any static program analysis such as the type checking algorithms in the semantic analysis phase of compiler has a connection to type theory A prime example is Agda a programming language which uses UTT Luo s Unified Theory of dependent Types for its type system The programming language ML was developed for manipulating type theories see LCF and its own type system was heavily influenced by them Linguistics Type theory is also widely used in formal theories of semantics of natural languages especially Montague grammar and its descendants In particular categorial grammars and pregroup grammars extensively use type constructors to define the types noun verb etc of words The most common construction takes the basic types e displaystyle e and t displaystyle t for individuals and truth values respectively and defines the set of types recursively as follows if a displaystyle a and b displaystyle b are types then so is a b displaystyle langle a b rangle nothing except the basic types and what can be constructed from them by means of the previous clause are types A complex type a b displaystyle langle a b rangle is the type of functions from entities of type a displaystyle a to entities of type b displaystyle b Thus one has types like e t displaystyle langle e t rangle which are interpreted as elements of the set of functions from entities to truth values i e indicator functions of sets of entities An expression of type e t t displaystyle langle langle e t rangle t rangle is a function from sets of entities to truth values i e a indicator function of a set of sets This latter type is standardly taken to be the type of natural language quantifiers like everybody or nobody Montague 1973 Barwise and Cooper 1981 Type theory with records is a formal semantics representation framework using records to express type theory types It has been used in natural language processing principally computational semantics and dialogue systems Social sciences Gregory Bateson introduced a theory of logical types into the social sciences his notions of double bind and logical levels are based on Russell s theory of types LogicA type theory is a mathematical logic which is to say it is a collection of rules of inference that result in judgments Most logics have judgments asserting The proposition f displaystyle varphi is true or The formula f displaystyle varphi is a well formed formula A type theory has judgments that define types and assign them to a collection of formal objects known as terms A term and its type are often written together as term type displaystyle mathrm term mathsf type Terms A term in logic is recursively defined as a constant symbol variable or a function application where a term is applied to another term Constant symbols could include the natural number 0 displaystyle 0 the Boolean value true displaystyle mathrm true and functions such as the successor function S displaystyle mathrm S and conditional operator if displaystyle mathrm if Thus some terms could be 0 displaystyle 0 S0 displaystyle mathrm S 0 S S0 displaystyle mathrm S mathrm S 0 and iftrue0 S0 displaystyle mathrm if mathrm true 0 mathrm S 0 Judgments Most type theories have 4 judgments T displaystyle T is a type t displaystyle t is a term of type T displaystyle T Type T1 displaystyle T 1 is equal to type T2 displaystyle T 2 Terms t1 displaystyle t 1 and t2 displaystyle t 2 both of type T displaystyle T are equal Judgments may follow from assumptions For example one might say assuming x displaystyle x is a term of type bool displaystyle mathsf bool and y displaystyle y is a term of type nat displaystyle mathsf nat it follows that ifxyy displaystyle mathrm if x y y is a term of type nat displaystyle mathsf nat Such judgments are formally written with the turnstile symbol displaystyle vdash x bool y nat ifxyy nat displaystyle x mathsf bool y mathsf nat vdash textrm if x y y mathsf nat If there are no assumptions there will be nothing to the left of the turnstile S nat nat displaystyle vdash mathrm S mathsf nat to mathsf nat The list of assumptions on the left is the context of the judgment Capital greek letters such as G displaystyle Gamma and D displaystyle Delta are common choices to represent some or all of the assumptions The 4 different judgments are thus usually written as follows Formal notation for judgments DescriptionG T displaystyle Gamma vdash T Type T displaystyle T is a type under assumptions G displaystyle Gamma G t T displaystyle Gamma vdash t T t displaystyle t is a term of type T displaystyle T under assumptions G displaystyle Gamma G T1 T2 displaystyle Gamma vdash T 1 T 2 Type T1 displaystyle T 1 is equal to type T2 displaystyle T 2 under assumptions G displaystyle Gamma G t1 t2 T displaystyle Gamma vdash t 1 t 2 T Terms t1 displaystyle t 1 and t2 displaystyle t 2 are both of type T displaystyle T and are equal under assumptions G displaystyle Gamma Some textbooks use a triple equal sign displaystyle equiv to stress that this is judgmental equality and thus an extrinsic notion of equality The judgments enforce that every term has a type The type will restrict which rules can be applied to a term Rules of Inference A type theory s inference rules say what judgments can be made based on the existence of other judgments Rules are expressed as a Gentzen style deduction using a horizontal line with the required input judgments above the line and the resulting judgment below the line For example the following inference rule states a substitution rule for judgmental equality G t T1D T1 T2G D t T2 displaystyle begin array c Gamma vdash t T 1 qquad Delta vdash T 1 T 2 hline Gamma Delta vdash t T 2 end array The rules are syntactic and work by rewriting The metavariables G displaystyle Gamma D displaystyle Delta t displaystyle t T1 displaystyle T 1 and T2 displaystyle T 2 may actually consist of complex terms and types that contain many function applications not just single symbols To generate a particular judgment in type theory there must be a rule to generate it as well as rules to generate all of that rule s required inputs and so on The applied rules form a proof tree where the top most rules need no assumptions One example of a rule that does not require any inputs is one that states the type of a constant term For example to assert that there is a term 0 displaystyle 0 of type nat displaystyle mathsf nat one would write the following 0 nat displaystyle begin array c hline vdash 0 nat end array Type inhabitation Generally the desired conclusion of a proof in type theory is one of type inhabitation The decision problem of type inhabitation abbreviated by t G t t displaystyle exists t Gamma vdash t tau is Given a context G displaystyle Gamma and a type t displaystyle tau decide whether there exists a term t displaystyle t that can be assigned the type t displaystyle tau in the type environment G displaystyle Gamma Girard s paradox shows that type inhabitation is strongly related to the consistency of a type system with Curry Howard correspondence To be sound such a system must have uninhabited types A type theory usually has several rules including ones to create a judgment known as a context in this case add an assumption to the context context weakening rearrange the assumptions use an assumption to create a variable define reflexivity symmetry and transitivity for judgmental equality define substitution for application of lambda terms list all the interactions of equality such as substitution define a hierarchy of type universes assert the existence of new types Also for each by rule type there are 4 different kinds of rules type formation rules say how to create the type term introduction rules define the canonical terms and constructor functions like pair and S term elimination rules define the other functions like first second and R computation rules specify how computation is performed with the type specific functions For examples of rules an interested reader may follow Appendix A 2 of the Homotopy Type Theory book or read Martin Lof s Intuitionistic Type Theory Connections to foundationsThe logical framework of a type theory bears a resemblance to intuitionistic or constructive logic Formally type theory is often cited as an implementation of the Brouwer Heyting Kolmogorov interpretation of intuitionistic logic Additionally connections can be made to category theory and computer programs Intuitionistic logic When used as a foundation certain types are interpreted to be propositions statements that can be proven and terms inhabiting the type are interpreted to be proofs of that proposition When some types are interpreted as propositions there is a set of common types that can be used to connect them to make a Boolean algebra out of types However the logic is not classical logic but intuitionistic logic which is to say it does not have the law of excluded middle nor double negation Under this intuitionistic interpretation there are common types that act as the logical operators Logic Name Logic Notation Type Notation Type NameTrue displaystyle top displaystyle top Unit TypeFalse displaystyle bot displaystyle bot Empty TypeImplication A B displaystyle A to B A B displaystyle A to B FunctionNot A displaystyle neg A A displaystyle A to bot Function to Empty TypeAnd A B displaystyle A land B A B displaystyle A times B Product TypeOr A B displaystyle A lor B A B displaystyle A B Sum TypeFor All a A P a displaystyle forall a in A P a Pa A P a displaystyle Pi a A P a Dependent ProductExists a A P a displaystyle exists a in A P a Sa A P a displaystyle Sigma a A P a Dependent Sum Because the law of excluded middle does not hold there is no term of type Pa A A displaystyle Pi a A A to bot Likewise double negation does not hold so there is no term of type PA A A displaystyle Pi A A to bot to bot to A It is possible to include the law of excluded middle and double negation into a type theory by rule or assumption However terms may not compute down to canonical terms and it will interfere with the ability to determine if two terms are judgementally equal to each other citation needed Constructive mathematics Per Martin Lof proposed his intuitionistic type theory as a foundation for constructive mathematics Constructive mathematics requires when proving there exists an x displaystyle x with property P x displaystyle P x one must construct a particular x displaystyle x and a proof that it has property P displaystyle P In type theory existence is accomplished using the dependent product type and its proof requires a term of that type An example of a non constructive proof is proof by contradiction The first step is assuming that x displaystyle x does not exist and refuting it by contradiction The conclusion from that step is it is not the case that x displaystyle x does not exist The last step is by double negation concluding that x displaystyle x exists Constructive mathematics does not allow the last step of removing the double negation to conclude that x displaystyle x exists Most of the type theories proposed as foundations are constructive and this includes most of the ones used by proof assistants citation needed It is possible to add non constructive features to a type theory by rule or assumption These include operators on continuations such as call with current continuation However these operators tend to break desirable properties such as and parametricity Curry Howard correspondence The Curry Howard correspondence is the observed similarity between logics and programming languages The implication in logic A displaystyle to B resembles a function from type A to type B For a variety of logics the rules are similar to expressions in a programming language s types The similarity goes farther as applications of the rules resemble programs in the programming languages Thus the correspondence is often summarized as proofs as programs The opposition of terms and types can also be viewed as one of implementation and specification By program synthesis the computational counterpart of type inhabitation can be used to construct all or parts of programs from the specification given in the form of type information Type inference Many programs that work with type theory e g interactive theorem provers also do type inferencing It lets them select the rules that the user intends with fewer actions by the user Research areas Category theory Although the initial motivation for category theory was far removed from foundationalism the two fields turned out to have deep connections As John Lane Bell writes In fact categories can themselves be viewed as type theories of a certain kind this fact alone indicates that type theory is much more closely related to category theory than it is to set theory In brief a category can be viewed as a type theory by regarding its objects as types or sorts i e Roughly speaking a category may be thought of as a type theory shorn of its syntax A number of significant results follow in this way cartesian closed categories correspond to the typed l calculus Lambek 1970 categories with products and exponentials and one non terminal object correspond to the untyped l calculus observed independently by Lambek and Dana Scott around 1980 locally cartesian closed categories correspond to Martin Lof type theories Seely 1984 The interplay known as categorical logic has been a subject of active research since then see the monograph of Jacobs 1999 for instance Homotopy type theory Homotopy type theory attempts to combine type theory and category theory It focuses on equalities especially equalities between types Homotopy type theory differs from intuitionistic type theory mostly by its handling of the equality type In 2016 was proposed which is a homotopy type theory with normalization DefinitionsTerms and types Atomic terms The most basic types are called atoms and a term whose type is an atom is known as an atomic term Common atomic terms included in type theories are natural numbers often notated with the type nat displaystyle mathsf nat Boolean logic values true displaystyle mathrm true false displaystyle mathrm false notated with the type bool displaystyle mathsf bool and formal variables whose type may vary For example the following may be atomic terms 42 nat displaystyle 42 mathsf nat true bool displaystyle mathrm true mathsf bool x nat displaystyle x mathsf nat y bool displaystyle y mathsf bool Function terms In addition to atomic terms most modern type theories also allow for functions Function types introduce an arrow symbol and are defined inductively If s displaystyle sigma and t displaystyle tau are types then the notation s t displaystyle sigma to tau is the type of a function which takes a parameter of type s displaystyle sigma and returns a term of type t displaystyle tau Types of this form are known as simple types Some terms may be declared directly as having a simple type such as the following term add displaystyle mathrm add which takes in two natural numbers in sequence and returns one natural number add nat nat nat displaystyle mathrm add mathsf nat to mathsf nat to mathsf nat Strictly speaking a simple type only allows for one input and one output so a more faithful reading of the above type is that add displaystyle mathrm add is a function which takes in a natural number and returns a function of the form nat nat displaystyle mathsf nat to mathsf nat The parentheses clarify that add displaystyle mathrm add does not have the type nat nat nat displaystyle mathsf nat to mathsf nat to mathsf nat which would be a function which takes in a function of natural numbers and returns a natural number The convention is that the arrow is right associative so the parentheses may be dropped from add displaystyle mathrm add s type Lambda terms New function terms may be constructed using lambda expressions and are called lambda terms These terms are also defined inductively a lambda term has the form lv t displaystyle lambda v t where v displaystyle v is a formal variable and t displaystyle t is a term and its type is notated s t displaystyle sigma to tau where s displaystyle sigma is the type of v displaystyle v and t displaystyle tau is the type of t displaystyle t The following lambda term represents a function which doubles an input natural number lx addxx nat nat displaystyle lambda x mathrm add x x mathsf nat to mathsf nat The variable is x displaystyle x and implicit from the lambda term s type must have type nat displaystyle mathsf nat The term addxx displaystyle mathrm add x x has type nat displaystyle mathsf nat which is seen by applying the function application inference rule twice Thus the lambda term has type nat nat displaystyle mathsf nat to mathsf nat which means it is a function taking a natural number as an argument and returning a natural number A lambda term is often referred to as an anonymous function because it lacks a name The concept of anonymous functions appears in many programming languages Inference Rules Function application The power of type theories is in specifying how terms may be combined by way of inference rules Type theories which have functions also have the inference rule of function application if t displaystyle t is a term of type s t displaystyle sigma to tau and s displaystyle s is a term of type s displaystyle sigma then the application of t displaystyle t to s displaystyle s often written ts displaystyle t s has type t displaystyle tau For example if one knows the type notations 0 nat displaystyle 0 textsf nat 1 nat displaystyle 1 textsf nat and 2 nat displaystyle 2 textsf nat then the following type notations can be deduced from function application add1 nat nat displaystyle mathrm add 1 textsf nat to textsf nat add2 0 nat displaystyle mathrm add 2 0 textsf nat add1 add2 0 nat displaystyle mathrm add 1 mathrm add 2 0 textsf nat Parentheses indicate the order of operations however by convention function application is left associative so parentheses can be dropped where appropriate In the case of the three examples above all parentheses could be omitted from the first two and the third may simplified to add1 add20 nat displaystyle mathrm add 1 mathrm add 2 0 textsf nat Reductions Type theories that allow for lambda terms also include inference rules known as b displaystyle beta reduction and h displaystyle eta reduction They generalize the notion of function application to lambda terms Symbolically they are written lv t s t v s displaystyle lambda v t s rightarrow t v colon s b displaystyle beta reduction lv tv t displaystyle lambda v t v rightarrow t if v displaystyle v is not a free variable in t displaystyle t h displaystyle eta reduction The first reduction describes how to evaluate a lambda term if a lambda expression lv t displaystyle lambda v t is applied to a term s displaystyle s one replaces every occurrence of v displaystyle v in t displaystyle t with s displaystyle s The second reduction makes explicit the relationship between lambda expressions and function types if lv tv displaystyle lambda v t v is a lambda term then it must be that t displaystyle t is a function term because it is being applied to v displaystyle v Therefore the lambda expression is equivalent to just t displaystyle t as both take in one argument and apply t displaystyle t to it For example the following term may be b displaystyle beta reduced lx addxx 2 add22 displaystyle lambda x mathrm add x x 2 rightarrow mathrm add 2 2 In type theories that also establish notions of equality for types and terms there are corresponding inference rules of b displaystyle beta equality and h displaystyle eta equality Common terms and types Empty type The empty type has no terms The type is usually written displaystyle bot or 0 displaystyle mathbb 0 One use for the empty type is proofs of type inhabitation If for a type a displaystyle a it is consistent to derive a function of type a displaystyle a to bot then a displaystyle a is uninhabited which is to say it has no terms Unit type The unit type has exactly 1 canonical term The type is written displaystyle top or 1 displaystyle mathbb 1 and the single canonical term is written displaystyle ast The unit type is also used in proofs of type inhabitation If for a type a displaystyle a it is consistent to derive a function of type a displaystyle top to a then a displaystyle a is inhabited which is to say it must have one or more terms Boolean type The Boolean type has exactly 2 canonical terms The type is usually written bool displaystyle textsf bool or B displaystyle mathbb B or 2 displaystyle mathbb 2 The canonical terms are usually true displaystyle mathrm true and false displaystyle mathrm false Natural numbers Natural numbers are usually implemented in the style of Peano Arithmetic There is a canonical term 0 nat displaystyle 0 mathsf nat for zero Canonical values larger than zero use iterated applications of a successor function S nat nat displaystyle mathrm S mathsf nat to mathsf nat Dependent typing Some type theories allow for types of complex terms such as functions or lists to depend on the types of its arguments For example a type theory could have the dependent type lista displaystyle mathsf list a which should correspond to lists of terms where each term must have type a displaystyle a In this case list displaystyle mathsf list has the type U U displaystyle U to U where U displaystyle U denotes the universe of all types in the theory Some theories also permit types to be dependent on terms instead of types For example a theory could have the type vectorn displaystyle mathsf vector n where n displaystyle n is a term of type nat displaystyle mathsf nat encoding the length of the vector This allows for greater specificity and type safety functions with vector length restrictions or length matching requirements such as the dot product can encode this requirement as part of the type There are foundational issues that can arise from dependent types if a theory is not careful about what dependencies are allowed such as Girard s Paradox The logician Henk Barendegt introduced the lambda cube as a framework for studying various restrictions and levels of dependent typing Product type The product type depends on two types and its terms are commonly written as ordered pairs s t displaystyle s t or with the symbol displaystyle times The pair s t displaystyle s t has the product type s t displaystyle sigma times tau where s displaystyle sigma is the type of s displaystyle s and t displaystyle tau is the type of t displaystyle t The product type is usually defined with eliminator functions first Pst s t s displaystyle mathrm first Pi sigma tau sigma times tau to sigma and second Pst s t t displaystyle mathrm second Pi sigma tau sigma times tau to tau first s t displaystyle mathrm first s t returns s displaystyle s and second s t displaystyle mathrm second s t returns t displaystyle t Besides ordered pairs this type is used for the concepts of logical conjunction and intersection Sum type The sum type depends on two types and it is commonly written with the symbol displaystyle or displaystyle sqcup In programming languages sum types may be referred to as tagged unions The type s t displaystyle sigma sqcup tau is usually defined with constructors left s s t displaystyle mathrm left sigma to sigma sqcup tau and right t s t displaystyle mathrm right tau to sigma sqcup tau which are injective and an eliminator function match Pr s r t r s t r displaystyle mathrm match Pi rho sigma to rho to tau to rho to sigma sqcup tau to rho such that matchfg leftx displaystyle mathrm match f g mathrm left x returns fx displaystyle f x and matchfg righty displaystyle mathrm match f g mathrm right y returns gy displaystyle g y The sum type is used for the concepts of logical disjunction and union Dependent products and sums Two common type dependencies dependent product and dependent sum types allow for the theory to encode BHK intuitionistic logic by acting as equivalents to universal and existential quantification this is formalized by Curry Howard Correspondence As they also connect to products and sums in set theory they are often written with the symbols P displaystyle Pi and S displaystyle Sigma respectively Dependent product and sum types commonly appear in function types and are frequently incorporated in programming languages For example consider a function append displaystyle mathrm append which takes in a lista displaystyle mathsf list a and a term of type a displaystyle a and returns the list with the element at the end The type annotation of such a function would be append Pa lista a lista displaystyle mathrm append Pi a mathsf list a to a to mathsf list a which can be read as for any type a displaystyle a pass in a lista displaystyle mathsf list a and an a displaystyle a and return a lista displaystyle mathsf list a Sum types are seen in dependent pairs where the second type depends on the value of the first term This arises naturally in computer science where functions may return different types of outputs based on the input For example the Boolean type is usually defined with an eliminator function if displaystyle mathrm if which takes three arguments and behaves as follows iftruexy displaystyle mathrm if mathrm true x y returns x displaystyle x and iffalsexy displaystyle mathrm if mathrm false x y returns y displaystyle y The return type of this function depends on its bool displaystyle mathsf bool input If the type theory allows for dependent types then it is possible to define a function TF bool U U U displaystyle mathrm TF colon mathsf bool to U to U to U such that TFtruest displaystyle mathrm TF mathrm true sigma tau returns s displaystyle sigma and TFfalsest displaystyle mathrm TF mathrm false sigma tau returns t displaystyle tau The type of if displaystyle mathrm if may then be written as Pst bool s t Sx bool TFxst displaystyle Pi sigma tau mathsf bool to sigma to tau to Sigma x textsf bool mathrm TF x sigma tau Identity type Following the notion of Curry Howard Correspondence the identity type is a type introduced to mirror propositional equivalence as opposed to the judgmental syntactic equivalence that type theory already provides An identity type requires two terms of the same type and is written with the symbol displaystyle For example if x 1 displaystyle x 1 and 1 x displaystyle 1 x are terms then x 1 1 x displaystyle x 1 1 x is a possible type Canonical terms are created with a reflexivity function refl displaystyle mathrm refl For a term t displaystyle t the call reflt displaystyle mathrm refl t returns the canonical term inhabiting the type t t displaystyle t t The complexities of equality in type theory make it an active research topic homotopy type theory is a notable area of research that mainly deals with equality in type theory Inductive types Inductive types are a general template for creating a large variety of types In fact all the types described above and more can be defined using the rules of inductive types Two methods of generating inductive types are induction recursion and induction induction A method that only uses lambda terms is Scott encoding Some proof assistants such as Coq and Lean are based on the calculus for inductive constructions which is a calculus of constructions with inductive types Differences from set theoryThe most commonly accepted foundation for mathematics is first order logic with the language and axioms of Zermelo Fraenkel set theory with the axiom of choice abbreviated ZFC Type theories having sufficient expressibility may also act as a foundation of mathematics There are a number of differences between these two approaches Set theory has both rules and axioms while type theories only have rules Type theories in general do not have axioms and are defined by their rules of inference Classical set theory and logic have the law of excluded middle When a type theory encodes the concepts of and and or as types it leads to intuitionistic logic and does not necessarily have the law of excluded middle In set theory an element is not restricted to one set The element can appear in subsets and unions with other sets In type theory terms generally belong to only one type Where a subset would be used type theory can use a predicate function or use a dependently typed product type where each element x displaystyle x is paired with a proof that the subset s property holds for x displaystyle x Where a union would be used type theory uses the sum type which contains new canonical terms Type theory has a built in notion of computation Thus 1 1 and 2 are different terms in type theory but they compute to the same value Moreover functions are defined computationally as lambda terms In set theory 1 1 2 means that 1 1 is just another way to refer the value 2 Type theory s computation does require a complicated concept of equality Set theory encodes numbers as sets Type theory can encode numbers as functions using Church encoding or more naturally as inductive types and the construction closely resembles Peano s axioms In type theory proofs are types whereas in set theory proofs are part of the underlying first order logic Proponents of type theory will also point out its connection to constructive mathematics through the BHK interpretation its connection to logic by the Curry Howard isomorphism and its connections to Category theory Properties of type theories Terms usually belong to a single type However there are set theories that define subtyping Computation takes place by repeated application of rules Many types of theories are strongly normalizing which means that any order of applying the rules will always end in the same result However some are not In a normalizing type theory the one directional computation rules are called reduction rules and applying the rules reduces the term If a rule is not one directional it is called a conversion rule Some combinations of types are equivalent to other combinations of types When functions are considered exponentiation the combinations of types can be written similarly to algebraic identities Thus 0 A A displaystyle mathbb 0 A cong A 1 A A displaystyle mathbb 1 times A cong A 1 1 2 displaystyle mathbb 1 mathbb 1 cong mathbb 2 AB C AB AC displaystyle A B C cong A B times A C AB C AB C displaystyle A B times C cong A B C Axioms Most type theories do not have axioms This is because a type theory is defined by its rules of inference This is a source of confusion for people familiar with Set Theory where a theory is defined by both the rules of inference for a logic such as first order logic and axioms about sets Sometimes a type theory will add a few axioms An axiom is a judgment that is accepted without a derivation using the rules of inference They are often added to ensure properties that cannot be added cleanly through the rules Axioms can cause problems if they introduce terms without a way to compute on those terms That is axioms can interfere with the normalizing property of the type theory Some commonly encountered axioms are Axiom K ensures uniqueness of identity proofs That is that every term of an identity type is equal to reflexivity Univalence Axiom holds that equivalence of types is equality of types The research into this property led to where the property holds without needing an axiom Law of Excluded Middle is often added to satisfy users who want classical logic instead of intuitionistic logic The Axiom of Choice does not need to be added to type theory because in most type theories it can be derived from the rules of inference This is because of the constructive nature of type theory where proving that a value exists requires a method to compute the value The Axiom of Choice is less powerful in type theory than most set theories because type theory s functions must be computable and being syntax driven the number of terms in a type must be countable See Axiom of choice In constructive mathematics List of type theoriesMajor Simply typed lambda calculus which is a higher order logic intuitionistic type theory system F LF is often used to define other type theories calculus of constructions and its derivativesMinor Automath ST type theory UTT Luo s Unified Theory of dependent Types some forms of combinatory logic others defined in the lambda cube also known as pure type systems others under the name typed lambda calculusActive research Homotopy type theory explores equality of types Cubical Type Theory is an implementation of homotopy type theorySee alsoClass set theory Logic Type token distinctionFurther readingAarts C Backhouse R Hoogendijk P Voermans E van der Woude J December 1992 A Relational Theory of Datatypes Technische Universiteit Eindhoven Andrews B Peter 2002 An Introduction to Mathematical Logic and Type Theory To Truth Through Proof 2nd ed Kluwer ISBN 978 1 4020 0763 7 Jacobs Bart 1999 Categorical Logic and Type Theory Studies in Logic and the Foundations of Mathematics Vol 141 Elsevier ISBN 978 0 444 50170 7 Archived from the original on 2023 08 10 Retrieved 2020 07 19 Covers type theory in depth including polymorphic and dependent type extensions Gives categorical semantics Cardelli Luca 1996 Type Systems In Tucker Allen B ed The Computer Science and Engineering Handbook CRC Press pp 2208 36 ISBN 9780849329098 Archived from the original on 2008 04 10 Retrieved 2004 06 26 Collins Jordan E 2012 A History of the Theory of Types Developments After the Second Edition of Principia Mathematica Lambert Academic Publishing hdl 11375 12315 ISBN 978 3 8473 2963 3 Provides a historical survey of the developments of the theory of types with a focus on the decline of the theory as a foundation of mathematics over the four decades following the publication of the second edition of Principia Mathematica Constable Robert L 2012 2002 Naive Computational Type Theory PDF In Schwichtenberg H Steinbruggen R eds Proof and System Reliability Nato Science Series II Vol 62 Springer pp 213 259 ISBN 9789401004138 Archived PDF from the original on 2022 10 09 Intended as a type theory counterpart of Paul Halmos s 1960 Naive Set Theory Coquand Thierry 2018 2006 Type Theory Stanford Encyclopedia of Philosophy Thompson Simon 1991 Type Theory and Functional Programming Addison Wesley ISBN 0 201 41667 0 Archived from the original on 2021 03 23 Retrieved 2006 04 03 Hindley J Roger 2008 1995 Basic Simple Type Theory Cambridge University Press ISBN 978 0 521 05422 5 A good introduction to simple type theory for computer scientists the system described is not exactly Church s STT though Book review Archived 2011 06 07 at the Wayback Machine Kamareddine Fairouz D Laan Twan Nederpelt Rob P 2004 A modern perspective on type theory from its origins until today Springer ISBN 1 4020 2334 0 Ferreiros Jose Dominguez Jose Ferreiros 2007 X Logic and Type Theory in the Interwar Period Labyrinth of thought a history of set theory and its role in modern mathematics 2nd ed Springer ISBN 978 3 7643 8349 7 Laan T D L 1997 The evolution of type theory in logic and mathematics PDF PhD Eindhoven University of Technology doi 10 6100 IR498552 ISBN 90 386 0531 5 Archived PDF from the original on 2022 10 09 Montague R 1973 The proper treatment of quantification in ordinary English In K J J Hintikka J M E Moravcsik and P Suppes eds Approaches to Natural Language Synthese Library 49 Dordrecht Reidel 221 242 reprinted in Portner and Partee eds 2002 pp 17 35 See Montague Semantics Stanford Encyclopedia of Philosophy NotesSee Terms and types In Julia s type system for example abstract types have no instances but can have subtype 110 whereas concrete types do not have subtypes but can have instances for documentation optimization and dispatch Church demonstrated his logistic method with his simple theory of types and explained his method in 1956 pages 47 68 In Julia for example a function with no name but with two parameters in some tuple x y can be denoted by say x y gt x 5 y as an anonymous function ReferencesBalbaert Ivo 2015 Getting Started With Julia Programming ISBN 978 1 78328 479 5 docs julialang org v 1 Types Archived 2022 03 24 at the Wayback Machine Stanford Encyclopedia of Philosophy rev Mon Oct 12 2020 Russell s Paradox Archived December 18 2021 at the Wayback Machine 3 Early Responses to the Paradox Church Alonzo 1940 A formulation of the simple theory of types The Journal of Symbolic Logic 5 2 56 68 doi 10 2307 2266170 JSTOR 2266170 S2CID 15889861 Alonzo Church 1956 Introduction To Mathematical Logic Vol 1 ETCS at the nLab Chatzikyriakidis Stergios Luo Zhaohui 2017 02 07 Modern Perspectives in Type Theoretical Semantics Springer ISBN 978 3 319 50422 3 Archived from the original on 2023 08 10 Retrieved 2022 07 29 Winter Yoad 2016 04 08 Elements of Formal Semantics An Introduction to the Mathematical Theory of Meaning in Natural Language Edinburgh University Press ISBN 978 0 7486 7777 1 Archived from the original on 2023 08 10 Retrieved 2022 07 29 Cooper Robin Type theory and semantics in flux Archived 2022 05 10 at the Wayback Machine Handbook of the Philosophy of Science 14 2012 271 323 Barwise Jon Cooper Robin 1981 Generalized quantifiers and natural language Linguistics and Philosophy 4 2 159 219 1981 Cooper Robin 2005 Records and Record Types in Semantic Theory Journal of Logic and Computation 15 2 99 112 doi 10 1093 logcom exi004 Cooper Robin 2010 Type theory and semantics in flux Handbook of the Philosophy of Science Volume 14 Philosophy of Linguistics Elsevier Martin Lof Per 1987 12 01 Truth of a proposition evidence of a judgement validity of a proof Synthese 73 3 407 420 doi 10 1007 BF00484985 ISSN 1573 0964 The Univalent Foundations Program 2013 Homotopy Type Theory Univalent Foundations of Mathematics Homotopy Type Theory Smith Peter Types of proof system PDF logicmatters net Archived PDF from the original on 2022 10 09 Retrieved 29 December 2021 Henk Barendregt Wil Dekkers Richard Statman 20 June 2013 Lambda Calculus with Types Cambridge University Press pp 1 66 ISBN 978 0 521 76614 2 Rules to Martin Lof s Intuitionistic Type Theory PDF Archived PDF from the original on 2021 10 21 Retrieved 2022 01 22 proof by contradiction nlab Archived from the original on 13 August 2023 Retrieved 29 December 2021 Heineman George T Bessai Jan Dudder Boris Rehof Jakob 2016 A long and winding road towards modular synthesis Leveraging Applications of Formal Methods Verification and Validation Foundational Techniques ISoLA 2016 Lecture Notes in Computer Science Vol 9952 Springer pp 303 317 doi 10 1007 978 3 319 47166 2 21 ISBN 978 3 319 47165 5 Bell John L 2012 Types Sets and Categories PDF In Kanamory Akihiro ed Sets and Extensions in the Twentieth Century Handbook of the History of Logic Vol 6 Elsevier ISBN 978 0 08 093066 4 Archived PDF from the original on 2018 04 17 Retrieved 2012 11 03 Sterling Jonathan Angiuli Carlo 2021 06 29 Normalization for Cubical Type Theory 2021 36th Annual ACM IEEE Symposium on Logic in Computer Science LICS Rome Italy IEEE pp 1 15 arXiv 2101 11479 doi 10 1109 LICS52264 2021 9470719 ISBN 978 1 6654 4895 6 S2CID 231719089 Archived from the original on 2023 08 13 Retrieved 2022 06 21 Cohen Cyril Coquand Thierry Huber Simon Mortberg Anders 2016 Cubical Type Theory A constructive interpretation of the univalence axiom PDF 21st International Conference on Types for Proofs and Programs TYPES 2015 arXiv 1611 02108 doi 10 4230 LIPIcs CVIT 2016 23 inactive 1 November 2024 Archived PDF from the original on 2022 10 09 a href wiki Template Cite journal title Template Cite journal cite journal a CS1 maint DOI inactive as of November 2024 link Balbaert Ivo 2015 Getting Started with Julia Bove Ana Dybjer Peter 2009 Bove Ana Barbosa Luis Soares Pardo Alberto Pinto Jorge Sousa eds Dependent Types at Work Language Engineering and Rigorous Software Development International LerNet ALFA Summer School 2008 Piriapolis Uruguay February 24 March 1 2008 Revised Tutorial Lectures Lecture Notes in Computer Science Berlin Heidelberg Springer pp 57 99 doi 10 1007 978 3 642 03153 3 2 ISBN 978 3 642 03153 3 retrieved 2024 01 18 Barendegt Henk April 1991 Introduction to generalized type systems Journal of Functional Programming 1 2 125 154 doi 10 1017 S0956796800020025 hdl 2066 17240 via Cambridge Core Milewski Bartosz Programming with Math Exploring Type Theory YouTube Archived from the original on 2022 01 22 Retrieved 2022 01 22 Axioms and Computation Theorem Proving in Lean Archived from the original on 22 December 2021 Retrieved 21 January 2022 Axiom K nLab Archived from the original on 2022 01 19 Retrieved 2022 01 21 External linksIntroductory material Type Theory at nLab which has articles on many topics Intuitionistic Type Theory article at the Stanford Encyclopedia of Philosophy Lambda Calculi with Types book by Henk Barendregt Calculus of Constructions Typed Lambda Calculus textbook style paper by Helmut Brandl Intuitionistic Type Theory notes by Per Martin Lof Programming in Martin Lof s Type Theory book Homotopy Type Theory book which proposed homotopy type theory as a mathematical foundation Advanced material Robert L Constable ed Computational type theory Scholarpedia The TYPES Forum moderated e mail forum focusing on type theory in computer science operating since 1987 The Nuprl Book Introduction to Type Theory Types Project lecture notes of summer schools 2005 2008 The 2005 summer school has introductory lectures Oregon Programming Languages Summer School many lectures and some notes Summer 2013 lectures including Robert Harper s talks on YouTube Summer 2015 Types Logic Semantics and Verification Andrej Bauer s blog