[STATEMENT]
theorem CSC_Resolution_pre: "\<Gamma> \<Rightarrow>\<^sub>n \<Longrightarrow> \<forall>\<gamma> \<in> set_mset \<Gamma>. is_cnf \<gamma> \<Longrightarrow> (\<Union>(cnf ` set_mset \<Gamma>)) \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<Gamma> \<Rightarrow>\<^sub>n; \<forall>\<gamma>\<in>#\<Gamma>. is_cnf \<gamma>\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
proof(induction rule: LSC.induct)
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>k \<Gamma>. Multiset.Ball (\<^bold>\<not> (Atom k), Atom k, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
 2. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 8. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 9. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case (Ax k \<Gamma>)
[PROOF STATE]
proof (state)
this:
\<forall>a\<in>#\<^bold>\<not> (Atom k), Atom k, \<Gamma>. is_cnf a

goal (9 subgoals):
 1. \<And>k \<Gamma>. Multiset.Ball (\<^bold>\<not> (Atom k), Atom k, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
 2. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 8. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 9. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
let ?s = "\<Union>(cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>))"
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>k \<Gamma>. Multiset.Ball (\<^bold>\<not> (Atom k), Atom k, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
 2. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 8. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 9. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
have "?s \<turnstile> {k\<^sup>+}" "?s \<turnstile> {k\<inverse>}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<^sup>+} &&& \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<inverse>}
[PROOF STEP]
using Resolution.Ass[where 'a='a]
[PROOF STATE]
proof (prove)
using this:
?C \<in> ?S \<Longrightarrow> ?S \<turnstile> ?C

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<^sup>+} &&& \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<inverse>}
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<^sup>+}
\<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<inverse>}

goal (9 subgoals):
 1. \<And>k \<Gamma>. Multiset.Ball (\<^bold>\<not> (Atom k), Atom k, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
 2. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 8. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 9. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
from Resolution.R[OF this, of k]
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>k\<^sup>+ \<in> {k\<^sup>+}; k\<inverse> \<in> {k\<inverse>}\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<^sup>+} - {k\<^sup>+} \<union> ({k\<inverse>} - {k\<inverse>})
[PROOF STEP]
have "?s \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>k\<^sup>+ \<in> {k\<^sup>+}; k\<inverse> \<in> {k\<inverse>}\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> {k\<^sup>+} - {k\<^sup>+} \<union> ({k\<inverse>} - {k\<inverse>})

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>

goal (9 subgoals):
 1. \<And>k \<Gamma>. Multiset.Ball (\<^bold>\<not> (Atom k), Atom k, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
 2. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 8. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 9. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (\<^bold>\<not> (Atom k), Atom k, \<Gamma>)) \<turnstile> \<box>

goal (8 subgoals):
 1. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 7. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 8. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 7. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 8. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case (BotL \<Gamma>)
[PROOF STATE]
proof (state)
this:
\<forall>a\<in>#\<bottom>, \<Gamma>. is_cnf a

goal (8 subgoals):
 1. \<And>\<Gamma>. Multiset.Ball (\<bottom>, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 7. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 8. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>a\<in>#\<bottom>, \<Gamma>. is_cnf a

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by(simp add: Ass)
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (\<bottom>, \<Gamma>)) \<turnstile> \<box>

goal (7 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 6. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 6. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case (AndL F G \<Gamma>)
[PROOF STATE]
proof (state)
this:
F, G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<and> G, \<Gamma>. is_cnf a

goal (7 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 6. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence "\<Union>(cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
F, G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<and> G, \<Gamma>. is_cnf a

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>

goal (7 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>F, G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<and> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 3. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 6. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 7. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<Union> (cnf ` set_mset (F, G, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by(simp add: Un_left_commute sup.assoc)
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F \<^bold>\<and> G, \<Gamma>)) \<turnstile> \<box>

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
(* The idea for the whole trickery with F being a literal (is_disj has to only allows right deep formulas)
    and the sandwiching is from Gallier, but mentioned there only in one little sentence. *)
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case (OrL F \<Gamma> G)
[PROOF STATE]
proof (state)
this:
F, \<Gamma> \<Rightarrow>\<^sub>n
G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<or> G, \<Gamma>. is_cnf a

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence "is_cnf (F \<^bold>\<or> G)"
[PROOF STATE]
proof (prove)
using this:
F, \<Gamma> \<Rightarrow>\<^sub>n
G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<or> G, \<Gamma>. is_cnf a

goal (1 subgoal):
 1. is_cnf (F \<^bold>\<or> G)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
is_cnf (F \<^bold>\<or> G)

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence d: "is_disj (F \<^bold>\<or> G)"
[PROOF STATE]
proof (prove)
using this:
is_cnf (F \<^bold>\<or> G)

goal (1 subgoal):
 1. is_disj (F \<^bold>\<or> G)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
is_disj (F \<^bold>\<or> G)

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence db: "is_disj F" "is_lit_plus F" "is_disj G"
[PROOF STATE]
proof (prove)
using this:
is_disj (F \<^bold>\<or> G)

goal (1 subgoal):
 1. is_disj F &&& is_lit_plus F &&& is_disj G
[PROOF STEP]
by (-, cases F) simp_all
[PROOF STATE]
proof (state)
this:
is_disj F
is_lit_plus F
is_disj G

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence "is_cnf F \<and> is_cnf G"
[PROOF STATE]
proof (prove)
using this:
is_disj F
is_lit_plus F
is_disj G

goal (1 subgoal):
 1. is_cnf F \<and> is_cnf G
[PROOF STEP]
by(cases F; cases G; simp)
[PROOF STATE]
proof (state)
this:
is_cnf F \<and> is_cnf G

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
with OrL
[PROOF STATE]
proof (chain)
picking this:
F, \<Gamma> \<Rightarrow>\<^sub>n
G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<or> G, \<Gamma>. is_cnf a
is_cnf F \<and> is_cnf G
[PROOF STEP]
have IH: "(\<Union>(cnf ` set_mset (F, \<Gamma>))) \<turnstile> \<box>" "(\<Union>(cnf ` set_mset (G, \<Gamma>))) \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
F, \<Gamma> \<Rightarrow>\<^sub>n
G, \<Gamma> \<Rightarrow>\<^sub>n
\<forall>a\<in>#F, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#G, \<Gamma>. is_cnf a \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
\<forall>a\<in>#F \<^bold>\<or> G, \<Gamma>. is_cnf a
is_cnf F \<and> is_cnf G

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box> &&& \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
let ?\<Gamma> = "(\<Union>(cnf ` set_mset \<Gamma>))"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
from IH
[PROOF STATE]
proof (chain)
picking this:
\<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
have IH_readable: "cnf F \<union> ?\<Gamma> \<turnstile> \<box>" "cnf G \<union> ?\<Gamma> \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
\<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. cnf F \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box> &&& cnf G \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
cnf F \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
cnf G \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (6 subgoals):
 1. \<And>F \<Gamma> G. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<or> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 4. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 5. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 6. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
proof(cases "cnf F = {} \<or> cnf G = {}")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. cnf F = {} \<or> cnf G = {} \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
cnf F = {} \<or> cnf G = {}

goal (2 subgoals):
 1. cnf F = {} \<or> cnf G = {} \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence "cnf (F \<^bold>\<or> G) = {}"
[PROOF STATE]
proof (prove)
using this:
cnf F = {} \<or> cnf G = {}

goal (1 subgoal):
 1. cnf (F \<^bold>\<or> G) = {}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
cnf (F \<^bold>\<or> G) = {}

goal (2 subgoals):
 1. cnf F = {} \<or> cnf G = {} \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
 2. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
cnf (F \<^bold>\<or> G) = {}

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
using True IH
[PROOF STATE]
proof (prove)
using this:
cnf (F \<^bold>\<or> G) = {}
cnf F = {} \<or> cnf G = {}
\<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> (cnf F = {} \<or> cnf G = {})

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (cnf F = {} \<or> cnf G = {})
[PROOF STEP]
obtain S T where ST: "cnf F = {S}" "cnf G = {T}"
[PROOF STATE]
proof (prove)
using this:
\<not> (cnf F = {} \<or> cnf G = {})

goal (1 subgoal):
 1. (\<And>S T. \<lbrakk>cnf F = {S}; cnf G = {T}\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using cnf_disj_ex db(1,3)
[PROOF STATE]
proof (prove)
using this:
\<not> (cnf F = {} \<or> cnf G = {})
is_disj ?F \<Longrightarrow> \<exists>R. cnf ?F = {R} \<or> cnf ?F = {}
is_disj F
is_disj G

goal (1 subgoal):
 1. (\<And>S T. \<lbrakk>cnf F = {S}; cnf G = {T}\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
(* try applying meson here. It's weird. and sledgehammer even suggests it. *)
[PROOF STATE]
proof (prove)
using this:
\<not> (cnf F = {} \<or> cnf G = {})
is_disj ?F \<Longrightarrow> \<exists>R. cnf ?F = {R} \<or> cnf ?F = {}
is_disj F
is_disj G

goal (1 subgoal):
 1. (\<And>S T. \<lbrakk>cnf F = {S}; cnf G = {T}\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
cnf F = {S}
cnf G = {T}

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
(* hint: card S \<le> 1 *)
[PROOF STATE]
proof (state)
this:
cnf F = {S}
cnf G = {T}

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence R: "cnf (F \<^bold>\<or> G) = { S \<union> T }"
[PROOF STATE]
proof (prove)
using this:
cnf F = {S}
cnf G = {T}

goal (1 subgoal):
 1. cnf (F \<^bold>\<or> G) = {S \<union> T}
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
cnf (F \<^bold>\<or> G) = {S \<union> T}

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
have "\<lbrakk>S\<triangleright>?\<Gamma> \<turnstile> \<box>; T\<triangleright>?\<Gamma> \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T\<triangleright> ?\<Gamma> \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
assume s: "S\<triangleright>?\<Gamma> \<turnstile> \<box>" and t: "T\<triangleright>?\<Gamma> \<turnstile> \<box>"
[PROOF STATE]
proof (state)
this:
S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
hence s_w: "S \<triangleright> S \<union> T \<triangleright> ?\<Gamma> \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. S \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
using Resolution_weaken
[PROOF STATE]
proof (prove)
using this:
S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
?S \<turnstile> ?D \<Longrightarrow> ?T \<union> ?S \<turnstile> ?D

goal (1 subgoal):
 1. S \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
by (metis insert_commute insert_is_Un)
[PROOF STATE]
proof (state)
this:
S \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
note Resolution_taint_assumptions[of "{T}" ?\<Gamma> "\<box>" S] t
[PROOF STATE]
proof (state)
this:
{T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box> \<Longrightarrow> \<exists>R\<subseteq>S. (\<union>) S ` {T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R \<union> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
{T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box> \<Longrightarrow> \<exists>R\<subseteq>S. (\<union>) S ` {T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R \<union> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
obtain R where R: "S \<union> T \<triangleright> \<Union>(cnf ` set_mset \<Gamma>) \<turnstile> R" "R\<subseteq>S"
[PROOF STATE]
proof (prove)
using this:
{T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box> \<Longrightarrow> \<exists>R\<subseteq>S. (\<union>) S ` {T} \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R \<union> \<box>
T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. (\<And>R. \<lbrakk>S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R; R \<subseteq> S\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: Un_commute)
[PROOF STATE]
proof (state)
this:
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R
R \<subseteq> S

goal (1 subgoal):
 1. \<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
using literal_subset_sandwich[OF db(2) ST(1) R(2)]
[PROOF STATE]
proof (prove)
using this:
R = \<box> \<or> R = S

goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. R = \<box> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
 2. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
assume "R = \<box>"
[PROOF STATE]
proof (state)
this:
R = \<box>

goal (2 subgoals):
 1. R = \<box> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
 2. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
R = \<box>

goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
using R(1)
[PROOF STATE]
proof (prove)
using this:
R = \<box>
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R

goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
from Resolution_unnecessary[where T="{_}", simplified] R(1)
[PROOF STATE]
proof (chain)
picking this:
?S \<turnstile> ?uu5 \<Longrightarrow> (?uu5 \<triangleright> ?S \<turnstile> ?D) = (?S \<turnstile> ?D)
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R
[PROOF STEP]
have "(R \<triangleright> S \<union> T \<triangleright> ?\<Gamma> \<turnstile> \<box>) = (S \<union> T \<triangleright> ?\<Gamma> \<turnstile> \<box>)"
[PROOF STATE]
proof (prove)
using this:
?S \<turnstile> ?uu5 \<Longrightarrow> (?uu5 \<triangleright> ?S \<turnstile> ?D) = (?S \<turnstile> ?D)
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> R

goal (1 subgoal):
 1. (R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)

goal (1 subgoal):
 1. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)

goal (1 subgoal):
 1. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
assume "R = S"
[PROOF STATE]
proof (state)
this:
R = S

goal (1 subgoal):
 1. R = S \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)
R = S
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)
R = S

goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
using s_w
[PROOF STATE]
proof (prove)
using this:
(R \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>) = (S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>)
R = S
S \<triangleright> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. \<not> (cnf F = {} \<or> cnf G = {}) \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
using IH ST R
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>S \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>; T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>\<rbrakk> \<Longrightarrow> S \<union> T \<triangleright> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
\<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>
\<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>
cnf F = {S}
cnf G = {T}
cnf (F \<^bold>\<or> G) = {S \<union> T}

goal (1 subgoal):
 1. \<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>

goal (5 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
hence case_readable: "cnf (F \<^bold>\<or> G) \<union> ?\<Gamma> \<turnstile> \<box>"
[PROOF STATE]
proof (prove)
using this:
\<Union> (cnf ` set_mset (F \<^bold>\<or> G, \<Gamma>)) \<turnstile> \<box>

goal (1 subgoal):
 1. cnf (F \<^bold>\<or> G) \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
cnf (F \<^bold>\<or> G) \<union> \<Union> (cnf ` set_mset \<Gamma>) \<turnstile> \<box>

goal (5 subgoals):
 1. \<And>F G \<Gamma>. \<lbrakk>\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<or> G), \<Gamma>)) \<turnstile> \<box>
 2. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<and> G), \<Gamma>)) \<turnstile> \<box>
 3. \<And>F \<Gamma> G. \<lbrakk>\<^bold>\<not> F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (\<^bold>\<not> F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> F, \<Gamma>)) \<turnstile> \<box>; G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (F \<^bold>\<rightarrow> G, \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (F \<^bold>\<rightarrow> G, \<Gamma>)) \<turnstile> \<box>
 4. \<And>F G \<Gamma>. \<lbrakk>F, \<^bold>\<not> G, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<^bold>\<not> G, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<^bold>\<not> G, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (F \<^bold>\<rightarrow> G), \<Gamma>)) \<turnstile> \<box>
 5. \<And>F \<Gamma>. \<lbrakk>F, \<Gamma> \<Rightarrow>\<^sub>n; Multiset.Ball (F, \<Gamma>) is_cnf \<Longrightarrow> \<Union> (cnf ` set_mset (F, \<Gamma>)) \<turnstile> \<box>; Multiset.Ball (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>) is_cnf\<rbrakk> \<Longrightarrow> \<Union> (cnf ` set_mset (\<^bold>\<not> (\<^bold>\<not> F), \<Gamma>)) \<turnstile> \<box>
[PROOF STEP]
qed auto