Mutual Coinduction
In this paper we present mutual coinduction as a dual of mutual induction and as a generalization of standard coinduction. In particular, we present a formal definition of mutual induction and mutual coinduction, and in the process we present, and prove, the associated mutual induction and mutual coinduction proof principles. In spite of the existence of some mention of mutual induction in mathematical and programming languages research literature, but the formal definition of mutual (co)induction and the proof of the mutual (co)induction proof principles we present here seem to be the first such definition and proof. As such, to the best of our knowledge, it seems our work is the first to point out that, unlike the case for standard (co)induction, monotonicity is not sufficient for guaranteeing the existence of least and greatest simultaneous fixed points, and that continuity is sufficient for guaranteeing their existence. A main goal behind defining mutual coinduction is to help make transparent what is currently perceived as opaque. In particular, a motivating example behind us formally defining mutual coinduction, and presenting a formulation of it in PL type theory in particular, is the study of the mutually-recursive definitions of the subtyping relation between types and the containment relation between interval types in object-oriented programming. These two relations together, as sets of pairs, seem to form an example of mutually-coinductive sets. As another possible application of mutual coinduction in PL semantics, noting the equivalence of some of the `worst' imperative (and object-oriented) programs to mutually-recursive functional programs hints that mutual coinduction may enable combining the accurate mathematical-reasoning benefits of functional programming with the accurate world-modeling benefits of object-oriented programming.
READ FULL TEXT