- required to describe result type of operators and functions depending on the input parameter types - examples: - matrix multiplication: (2x3) * (3x4) => (2x4) - concatenation of strings or lists: string[2] + string[3] => string[5] - related to "dependent types", but the values are constant here!