Represents arrows between types.
Represents intersection type constructors.
Type class for syntactic sugar for intersection type constructors.
Things which induce finite spaces of substitutions.
Represents intersections between types.
Represents intersections between types. Intersections have precedence level 10, so all operators with levels below 10 need parenthesis when converted into strings.
Kindings restrict variables by enumerating all of their possible substitutions.
Type class to compute a minimal set wrt.
Type class to compute a minimal set wrt. some metric adhering to some constraint.
Non empty kindings with a marked root variable.
A non empty taxonomy with a marked root node
A type is organized iff it is syntactically identical to an intersection of paths.
A path p
conforms to the syntax:
p ::= 'C(p) | C(Omega) | (Omega, Omega) | (Omega, p) | (p, Omega) | sigma_1 =>: ... =>: sigma_k =>: p
where each sigma_i
is an arbitrary intersection type without variables.
A path p
conforms to the syntax:
p ::= 'C(p) | C(Omega) | (Omega, Omega) | (Omega, p) | (p, Omega) | sigma_1 =>: ... =>: sigma_k =>: p
where each sigma_i
is an arbitrary intersection type without variables.
Represents a product of two types.
Subtyping based on a taxonomy of type constructors.
Subtyping based on a taxonomy of type constructors.
the taxonomy, where each constructor name is mapped to its directly smaller successors.
Taxonomies are relations between constructor names.
Taxonomies are relations between constructor names.
For a taxonomy t we have 'C <= 'D
if "D"
is in t("C")
.
Subtyping will arange the transitive reflexive closure of taxonomies.
Instances of ConstructorSyntax
for symbols, so we can use 'A('B) notation.
Instances of TypeSyntax
for intersection types.
Abstract base for all intersection types.
Type class for syntactic sugar to construct intersection types.
Variables in intersection type schemes.
Helpers to construct finite substitution spaces.
Helper object to construct Kinding.
The universal intersection type ω, which is a supertype of everything.
Helper methods to organize types.
Helper methods to (de-)construct paths from (/into) arguments and targets of arrows.
Helper to construct new taxonomies.
Standard operations on types.
Instances of syntactic sugar for intersection types.
Represents arrows between types. Intersections have precedence level 9, so all operators with levels below 9 need parenthesis when converted into strings.