induct: fixes P :: "'c \<Rightarrow> ('c \<times> 'd) tree23 \<Rightarrow> bool"   and a0 :: "'c"   and a1 :: "('c \<times> 'd) tree23" assumes "\<And>x. P x \<langle>\<rangle>"   and "\<And>x ab1. P x \<langle>\<langle>\<rangle>, ab1, \<langle>\<rangle>\<rangle>"   and "\<And>x ab1 ab2. P x \<langle>\<langle>\<rangle>, ab1, \<langle>\<rangle>, ab2, \<langle>\<rangle>\<rangle>"   and "\<And>x v va vb ab1 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x \<langle>v, va, vb\<rangle>; cmp x (fst ab1) = GT \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>\<langle>v, va, vb\<rangle>, ab1, r\<rangle>"   and "\<And>x v va vb vc vd ab1 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x \<langle>v, va, vb, vc, vd\<rangle>; cmp x (fst ab1) = GT \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>\<langle>v, va, vb, vc, vd\<rangle>, ab1, r\<rangle>"   and "\<And>x l ab1 v va vb. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; cmp x (fst ab1) = GT \<Longrightarrow> P x \<langle>v, va, vb\<rangle>\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, \<langle>v, va, vb\<rangle>\<rangle>"   and "\<And>x l ab1 v va vb vc vd. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; cmp x (fst ab1) = GT \<Longrightarrow> P x \<langle>v, va, vb, vc, vd\<rangle>\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, \<langle>v, va, vb, vc, vd\<rangle>\<rangle>"   and "\<And>x v va vb ab1 m ab2 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x \<langle>v, va, vb\<rangle>; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x m; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>\<langle>v, va, vb\<rangle>, ab1, m, ab2, r\<rangle>"   and "\<And>x v va vb vc vd ab1 m ab2 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x \<langle>v, va, vb, vc, vd\<rangle>; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x m; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>\<langle>v, va, vb, vc, vd\<rangle>, ab1, m, ab2, r\<rangle>"   and "\<And>x l ab1 v va vb ab2 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x \<langle>v, va, vb\<rangle>; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, \<langle>v, va, vb\<rangle>, ab2, r\<rangle>"   and "\<And>x l ab1 v va vb vc vd ab2 r. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x \<langle>v, va, vb, vc, vd\<rangle>; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x r\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, \<langle>v, va, vb, vc, vd\<rangle>, ab2, r\<rangle>"   and "\<And>x l ab1 m ab2 v va vb. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x m; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x \<langle>v, va, vb\<rangle>\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, m, ab2, \<langle>v, va, vb\<rangle>\<rangle>"   and "\<And>x l ab1 m ab2 v va vb vc vd. \<lbrakk>cmp x (fst ab1) = LT \<Longrightarrow> P x l; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = LT\<rbrakk> \<Longrightarrow> P x m; \<lbrakk>cmp x (fst ab1) = GT; cmp x (fst ab2) = GT\<rbrakk> \<Longrightarrow> P x \<langle>v, va, vb, vc, vd\<rangle>\<rbrakk> \<Longrightarrow> P x \<langle>l, ab1, m, ab2, \<langle>v, va, vb, vc, vd\<rangle>\<rangle>" shows "P a0 a1"