We show that a simply-typed lambda-calculus with functions, products,
units, and sums is terminating under a call-by-value operational
semantics. The argument proceeds via logical relations, which take a
different and somewhat simpler form when compared to the proof of the
canonical form theorem.
We illustrate how this proof breaks down when we add recursion at
the level of types or terms, neither of which preserves termination.
We also begin the discussion of subtyping and desirable properties of
subtyping systemssuch as decidability, principal types, type
subtyping systemspreservation, and coherence.