Intersection type discipline

In mathematical logic, the intersection type discipline is a branch of type theory encompassing type systems that use the intersection type constructor to assign multiple types to a single term.[1] In particular, if a term can be assigned both the type and the type , then can be assigned the intersection type (and vice versa). Therefore, the intersection type constructor can be used to express finite heterogeneous ad hoc polymorphism (as opposed to parametric polymorphism). For example, the λ-term can be assigned the type in most intersection type systems, assuming for the term variable both the function type and the corresponding argument type .

Prominent intersection type systems include the Coppo–Dezani type assignment system,[2] the Barendregt-Coppo–Dezani type assignment system,[3] and the essential intersection type assignment system.[4] Most strikingly, intersection type systems are closely related to (and often exactly characterize) normalization properties of λ-terms under β-reduction.

In programming languages, such as TypeScript[5] and Scala,[6] intersection types are used to express ad hoc polymorphism.

  1. ^ Cite error: The named reference BDS13 was invoked but never defined (see the help page).
  2. ^ Cite error: The named reference CD80 was invoked but never defined (see the help page).
  3. ^ Cite error: The named reference BCD83 was invoked but never defined (see the help page).
  4. ^ Cite error: The named reference B11 was invoked but never defined (see the help page).
  5. ^ "Intersection Types in TypeScript". Retrieved 2019-08-01.
  6. ^ "Compound Types in Scala". Retrieved 2019-08-01.