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.
BDS13
was invoked but never defined (see the help page).CD80
was invoked but never defined (see the help page).BCD83
was invoked but never defined (see the help page).B11
was invoked but never defined (see the help page).