(Deep) Induction Rules for GADTs
Deep data types are those that are defined in terms of other such data types, including, possibly, themselves. In that case, they are said to be truly nested. Deep induction is an extension of structural induction that traverses all of the structure in a deep data type, propagating predicates on its primitive data throughout the entire structure. Deep induction can be used to prove properties of nested types, including truly nested types, that cannot be proved via structural induction. In this paper we show how to extend deep induction to deep GADTs that are not truly nested. We also show that deep induction cannot be extended to truly nested GADTs.
READ FULL TEXT