Algorithms for checking subtyping between recursive types lie at the core of many programming language implementations. But the fundamental theory of these algorithms and how they relate to simpler declarative speci cations is not widely understood, due in part to the di culty of the available introductions to the area. This tutorial paper o ers an \end-to-end" introduction to recursive types and subtyping algorithms, from basic theory to e cient implementation, set in the unifying mathematical framework of coinduction.
A good introduction to the theory and history of the field is in REF .
Recursive Subtyping Revealed
Journal of Functional Programming
Computer Science