We study a calculus with both subtyping and datatype definitions. Our primary goal is to understand the interaction of subtyping with mutually recursive types, which raises difficulties beyond those addressed in previous studies. A second aim is to clarify the relations between structural subtyping and the user-declared subtyping found in languages such as C++, Eiffel, and Java. 1 Introduction Since its introduction in Hope [BMS80], the datatype construct has become a staple of modern...