This presentation takes the view that the typing for an expression
(program fragment) may be obtained directly from the expression by
applying rewriting rules.
So the typing can be viewed as the result of *evaluating*
the expression using a non-standard semantics.
What are usually considered typings in other presentations are
merely those typings which are fully evaluated.
Thus, type inference can be seen as a kind of abstract evaluation.
This idea is illustrated by examples for the lambda calculus for
both simple types and intersection types.
This gives a simpler and clearer explanation of how System I (a
system of intersection types) works than earlier explanations.