induct: fixes A :: "'b set"   and x1 :: "nat"   and x2 :: "(('c, 'b) fm list \<times> 'b) list"   and P :: "nat \<Rightarrow> (('c, 'b) fm list \<times> 'b) list \<Rightarrow> bool" assumes "A, x1 \<turnstile> x2"   and "\<And>p i branch n. \<lbrakk>p at i in' set branch; (\<^bold>\<not> p) at i in' set branch\<rbrakk> \<Longrightarrow> P n branch"   and "\<And>p a ps branch n. \<lbrakk>(\<^bold>\<not> \<^bold>\<not> p) at a in' set ((ps, a) # branch); new p a ((ps, a) # branch); A, Suc n \<turnstile> (p # ps, a) # branch; P (Suc n) ((p # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>p q a ps branch n. \<lbrakk>(p \<^bold>\<or> q) at a in' set ((ps, a) # branch); new p a ((ps, a) # branch); new q a ((ps, a) # branch); A, Suc n \<turnstile> (p # ps, a) # branch; P (Suc n) ((p # ps, a) # branch); A, Suc n \<turnstile> (q # ps, a) # branch; P (Suc n) ((q # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>p q a ps branch n. \<lbrakk>(\<^bold>\<not> (p \<^bold>\<or> q)) at a in' set ((ps, a) # branch); new (\<^bold>\<not> p) a ((ps, a) # branch) \<or> new (\<^bold>\<not> q) a ((ps, a) # branch); A, Suc n \<turnstile> ((\<^bold>\<not> q) # (\<^bold>\<not> p) # ps, a) # branch; P (Suc n) (((\<^bold>\<not> q) # (\<^bold>\<not> p) # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>p a ps branch i n. \<lbrakk>(\<^bold>\<diamond> p) at a in' set ((ps, a) # branch); i \<notin> A \<union> branch_nominals ((ps, a) # branch); \<nexists>a. p = Nom a; \<not> witnessed p a ((ps, a) # branch); A, Suc n \<turnstile> ((\<^bold>@ i p) # (\<^bold>\<diamond> Nom i) # ps, a) # branch; P (Suc n) (((\<^bold>@ i p) # (\<^bold>\<diamond> Nom i) # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>p a ps branch i n. \<lbrakk>(\<^bold>\<not> (\<^bold>\<diamond> p)) at a in' set ((ps, a) # branch); (\<^bold>\<diamond> Nom i) at a in' set ((ps, a) # branch); new (\<^bold>\<not> (\<^bold>@ i p)) a ((ps, a) # branch); A, Suc n \<turnstile> ((\<^bold>\<not> (\<^bold>@ i p)) # ps, a) # branch; P (Suc n) (((\<^bold>\<not> (\<^bold>@ i p)) # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>a p b ps branch n. \<lbrakk>(\<^bold>@ a p) at b in' set ((ps, a) # branch); new p a ((ps, a) # branch); A, Suc n \<turnstile> (p # ps, a) # branch; P (Suc n) ((p # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>a p b ps branch n. \<lbrakk>(\<^bold>\<not> (\<^bold>@ a p)) at b in' set ((ps, a) # branch); new (\<^bold>\<not> p) a ((ps, a) # branch); A, Suc n \<turnstile> ((\<^bold>\<not> p) # ps, a) # branch; P (Suc n) (((\<^bold>\<not> p) # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)"   and "\<And>i branch n. \<lbrakk>i \<in> branch_nominals branch; A, n \<turnstile> ([], i) # branch; P n (([], i) # branch)\<rbrakk> \<Longrightarrow> P (Suc n) branch"   and "\<And>p b ps a branch n. \<lbrakk>p at b in' set ((ps, a) # branch); Nom a at b in' set ((ps, a) # branch); \<forall>i. p = Nom i \<or> p = (\<^bold>\<diamond> Nom i) \<longrightarrow> i \<in> A; new p a ((ps, a) # branch); A, Suc n \<turnstile> (p # ps, a) # branch; P (Suc n) ((p # ps, a) # branch)\<rbrakk> \<Longrightarrow> P n ((ps, a) # branch)" shows "P x1 x2"