  Recently we presented a concise survey of the formulation of the induction
and coinduction principles, and some concepts related to them, in programming
languages type theory and four other mathematical disciplines. The presentation
in type theory involved the separate formulation of these concepts, first, in
the theory of types of functional programming languages and, next, in the
theory of types of object-oriented programming languages. In this article we
show that separating these two formulations helps demonstrate some of the
fundamental differences between structural subtyping, predominant in functional
programming languages, and nominal subtyping, predominant in object-oriented
programming languages---including differences concerning type negation and
concerning the existence of inductive types, of coinductive types, and of
approximations thereof. In the article we also motivate mutual coinduction and
mutual coinductive types, and their approximations, and we discuss in brief the
potential relevance of these concepts to object-oriented programming (OOP) type
theory.
