[STATEMENT]
theorem negation_free_nnf : "negation_free (nnf \<phi>)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. negation_free (nnf \<phi>)
[PROOF STEP]
proof(induction "depth \<phi>" arbitrary : \<phi> rule: nat_less_induct )
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>\<phi>. \<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>)
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. \<And>\<phi>. \<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf \<phi>)
[PROOF STEP]
proof(induction \<phi>)
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2))
 5. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 7. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 8. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 9. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 10. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
case (And \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (10 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2))
 5. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 7. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 8. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 9. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 10. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (And \<phi>1 \<phi>2))
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<Suc (max (depth \<phi>1) (depth \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf \<phi>1) \<and> negation_free (nnf \<phi>2)
[PROOF STEP]
by (metis less_Suc_eq_le max.cobounded1 max.cobounded2)
[PROOF STATE]
proof (state)
this:
negation_free (nnf (And \<phi>1 \<phi>2))

goal (9 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 7. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 9. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 7. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 9. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
case (Or \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (9 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 7. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 9. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1)
\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2)
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (Or \<phi>1 \<phi>2))
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<Suc (max (depth \<phi>1) (depth \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf \<phi>1) \<and> negation_free (nnf \<phi>2)
[PROOF STEP]
by (metis less_Suc_eq_le max.cobounded1 max.cobounded2)
[PROOF STATE]
proof (state)
this:
negation_free (nnf (Or \<phi>1 \<phi>2))

goal (8 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 7. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 7. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
case (Neg \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>)
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (8 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 6. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 7. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 8. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>)
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>)
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (Neg \<phi>))
[PROOF STEP]
proof (induction \<phi>)
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2)); \<forall>m<depth (Neg (And \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (And \<phi>1 \<phi>2)))
 5. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2)); \<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 7. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 8. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 9. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 10. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
case (And \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2))
\<forall>m<depth (Neg (And \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (10 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2)); \<forall>m<depth (Neg (And \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (And \<phi>1 \<phi>2)))
 5. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2)); \<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 7. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 8. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 9. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 10. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2))
\<forall>m<depth (Neg (And \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (And \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (And \<phi>1 \<phi>2))
\<forall>m<depth (Neg (And \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (Neg (And \<phi>1 \<phi>2)))
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<Suc (depth \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<Suc (depth \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<Suc (max (depth \<phi>1) (depth \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1) \<and> negation_free (nnf \<phi>2); \<forall>m<Suc (Suc (max (depth \<phi>1) (depth \<phi>2))). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)) \<and> negation_free (nnf (Neg \<phi>2))
[PROOF STEP]
by (metis less_Suc_eq max_less_iff_conj not_less_eq)
[PROOF STATE]
proof (state)
this:
negation_free (nnf (Neg (And \<phi>1 \<phi>2)))

goal (9 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2)); \<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 7. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 9. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2)); \<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 7. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 9. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
case (Or \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
\<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (9 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2)); \<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 7. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 9. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
\<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<depth (Neg \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1))
\<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<depth (Neg \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2))
\<forall>m<depth (Or \<phi>1 \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Or \<phi>1 \<phi>2))
\<forall>m<depth (Neg (Or \<phi>1 \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>1. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1); \<forall>m<Suc (depth \<phi>1). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)); \<lbrakk>\<forall>m<depth \<phi>2. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>2); \<forall>m<Suc (depth \<phi>2). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>2)); \<forall>m<Suc (max (depth \<phi>1) (depth \<phi>2)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>1) \<and> negation_free (nnf \<phi>2); \<forall>m<Suc (Suc (max (depth \<phi>1) (depth \<phi>2))). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>1)) \<and> negation_free (nnf (Neg \<phi>2))
[PROOF STEP]
by (metis less_Suc_eq max_less_iff_conj not_less_eq)
[PROOF STATE]
proof (state)
this:
negation_free (nnf (Neg (Or \<phi>1 \<phi>2)))

goal (8 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 7. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 7. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
case (Neg \<phi>)
[PROOF STATE]
proof (state)
this:
\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (8 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (Neg \<phi>)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 6. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 7. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 8. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (Neg \<phi>))
\<forall>m<depth (Neg (Neg \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)

goal (1 subgoal):
 1. negation_free (nnf (Neg (Neg \<phi>)))
[PROOF STEP]
by (metis Suc_eq_plus1 add_lessD1 depth.simps(6) lessI nnf.simps(12))
[PROOF STATE]
proof (state)
this:
negation_free (nnf (Neg (Neg \<phi>)))

goal (7 subgoals):
 1. \<lbrakk>\<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF); \<forall>m<depth (Neg TrueF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg TrueF))
 2. \<lbrakk>\<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF); \<forall>m<depth (Neg FalseF). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg FalseF))
 3. \<And>x. \<lbrakk>\<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x)); \<forall>m<depth (Neg (fm.Atom x)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (fm.Atom x)))
 4. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExQ \<phi>)); \<forall>m<depth (Neg (ExQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExQ \<phi>)))
 5. \<And>\<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllQ \<phi>)); \<forall>m<depth (Neg (AllQ \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllQ \<phi>)))
 6. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>)); \<forall>m<depth (Neg (ExN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (ExN x1 \<phi>)))
 7. \<And>x1 \<phi>. \<lbrakk>\<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (Neg \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg \<phi>)); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>)); \<forall>m<depth (Neg (AllN x1 \<phi>)). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (Neg (AllN x1 \<phi>)))
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
negation_free (nnf (Neg \<phi>))

goal (7 subgoals):
 1. \<forall>m<depth TrueF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf TrueF)
 2. \<forall>m<depth FalseF. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf FalseF)
 3. \<And>x. \<forall>m<depth (fm.Atom x). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf (fm.Atom x))
 4. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExQ \<phi>))
 5. \<And>\<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllQ \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllQ \<phi>))
 6. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (ExN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (ExN x1 \<phi>))
 7. \<And>x1 \<phi>. \<lbrakk>\<forall>m<depth \<phi>. \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x) \<Longrightarrow> negation_free (nnf \<phi>); \<forall>m<depth (AllN x1 \<phi>). \<forall>x. m = depth x \<longrightarrow> negation_free (nnf x)\<rbrakk> \<Longrightarrow> negation_free (nnf (AllN x1 \<phi>))
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
negation_free (nnf \<phi>)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma winding_number_constI:
  assumes "c\<noteq>z" and g: "\<And>t. \<lbrakk>0\<le>t; t\<le>1\<rbrakk> \<Longrightarrow> g t = c"
  shows "winding_number g z = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
have "winding_number g z = winding_number (linepath c c) z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. winding_number g z = winding_number (linepath c c) z
[PROOF STEP]
using g winding_number_cong
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>0 \<le> ?t; ?t \<le> 1\<rbrakk> \<Longrightarrow> g ?t = c
(\<And>t. \<lbrakk>0 \<le> t; t \<le> 1\<rbrakk> \<Longrightarrow> ?p t = ?q t) \<Longrightarrow> winding_number ?p ?z = winding_number ?q ?z

goal (1 subgoal):
 1. winding_number g z = winding_number (linepath c c) z
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
winding_number g z = winding_number (linepath c c) z

goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
winding_number g z = winding_number (linepath c c) z

goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
have "winding_number (linepath c c) z = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. winding_number (linepath c c) z = 0
[PROOF STEP]
using \<open>c\<noteq>z\<close>
[PROOF STATE]
proof (prove)
using this:
c \<noteq> z

goal (1 subgoal):
 1. winding_number (linepath c c) z = 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
winding_number (linepath c c) z = 0

goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
winding_number g z = winding_number (linepath c c) z
winding_number (linepath c c) z = 0
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
winding_number g z = winding_number (linepath c c) z
winding_number (linepath c c) z = 0

goal (1 subgoal):
 1. winding_number g z = 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
winding_number g z = 0

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma poly_pos_between_leq_leq:
  "(\<forall>x. a \<le> x \<and> x \<le> b \<longrightarrow> poly p x > 0) \<longleftrightarrow>
   ((a > b \<or> (p \<noteq> 0 \<and> poly p a > 0 \<and>
                count_roots_between p a b = 0)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>x. a \<le> x \<and> x \<le> b \<longrightarrow> 0 < poly p x) = (b < a \<or> p \<noteq> 0 \<and> 0 < poly p a \<and> count_roots_between p a b = 0)
[PROOF STEP]
by (simp only: poly_pos_between_leq_leq Let_def poly_no_roots_leq_leq, force)


[STATEMENT]
lemma degree_m_mult_eq:
  assumes p: "monic p" and q: "lead_coeff q mod m \<noteq> 0" and m1: "m > 1"
  shows "degree (Mp (p * q)) = degree p + degree q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. degree_m (p * q) = degree p + degree q
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. degree_m (p * q) = degree p + degree q
[PROOF STEP]
have "lead_coeff (p * q) mod m \<noteq> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lead_coeff (p * q) mod m \<noteq> 0
[PROOF STEP]
using q p
[PROOF STATE]
proof (prove)
using this:
lead_coeff q mod m \<noteq> 0
monic p

goal (1 subgoal):
 1. lead_coeff (p * q) mod m \<noteq> 0
[PROOF STEP]
by (auto simp: lead_coeff_monic_mult)
[PROOF STATE]
proof (state)
this:
lead_coeff (p * q) mod m \<noteq> 0

goal (1 subgoal):
 1. degree_m (p * q) = degree p + degree q
[PROOF STEP]
with m1
[PROOF STATE]
proof (chain)
picking this:
1 < m
lead_coeff (p * q) mod m \<noteq> 0
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
1 < m
lead_coeff (p * q) mod m \<noteq> 0

goal (1 subgoal):
 1. degree_m (p * q) = degree p + degree q
[PROOF STEP]
by (auto simp: degree_m_eq intro!: degree_mult_eq)
[PROOF STATE]
proof (state)
this:
degree_m (p * q) = degree p + degree q

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma real_sqrt_sum_squares_eq_cancel2: "sqrt (x\<^sup>2 + y\<^sup>2) = y \<Longrightarrow> x = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sqrt (x\<^sup>2 + y\<^sup>2) = y \<Longrightarrow> x = 0
[PROOF STEP]
by (drule arg_cong [where f = "\<lambda>x. x\<^sup>2"]) simp


[STATEMENT]
lemma expand_arctan_approx:
  "(\<Sum>k<(numeral n::nat). inverse (f k) * inverse (x ^ k)) =
     inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k+1)) * inverse (x^k)) / x"
  "(\<Sum>k<Suc 0. inverse (f k) * inverse (x^k)) = inverse (f 0 :: 'a :: field)"
  "(\<Sum>k<(0::nat). inverse (f k) * inverse (x^k)) = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x &&& (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0) &&& (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
fix m :: nat
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
have "(\<Sum>k<Suc m. inverse (f k * x^k)) =
             inverse (f 0) + (\<Sum>k=Suc 0..<Suc m. inverse (f k * x^k))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>k<Suc m. inverse (f k * x ^ k)) = inverse (f 0) + (\<Sum>k = Suc 0..<Suc m. inverse (f k * x ^ k))
[PROOF STEP]
by (subst atLeast0LessThan [symmetric], subst sum.atLeast_Suc_lessThan) simp_all
[PROOF STATE]
proof (state)
this:
(\<Sum>k<Suc m. inverse (f k * x ^ k)) = inverse (f 0) + (\<Sum>k = Suc 0..<Suc m. inverse (f k * x ^ k))

goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<Sum>k<Suc m. inverse (f k * x ^ k)) = inverse (f 0) + (\<Sum>k = Suc 0..<Suc m. inverse (f k * x ^ k))

goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
have "(\<Sum>k=Suc 0..<Suc m. inverse (f k * x^k)) = (\<Sum>k<m. inverse (f (k+1) * x^k)) / x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>k = Suc 0..<Suc m. inverse (f k * x ^ k)) = (\<Sum>k<m. inverse (f (k + 1) * x ^ k)) / x
[PROOF STEP]
by (subst sum.shift_bounds_Suc_ivl)
         (simp add: sum_distrib_left divide_inverse algebra_simps
                    atLeast0LessThan power_commutes)
[PROOF STATE]
proof (state)
this:
(\<Sum>k = Suc 0..<Suc m. inverse (f k * x ^ k)) = (\<Sum>k<m. inverse (f (k + 1) * x ^ k)) / x

goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(\<Sum>k<Suc m. inverse (f k * x ^ k)) = inverse (f 0) + (\<Sum>k<m. inverse (f (k + 1) * x ^ k)) / x
[PROOF STEP]
have "(\<Sum>k<Suc m. inverse (f k) * inverse (x ^ k)) =
                      inverse (f 0) + (\<Sum>k<m. inverse (f (k + 1)) * inverse (x ^ k)) / x"
[PROOF STATE]
proof (prove)
using this:
(\<Sum>k<Suc m. inverse (f k * x ^ k)) = inverse (f 0) + (\<Sum>k<m. inverse (f (k + 1) * x ^ k)) / x

goal (1 subgoal):
 1. (\<Sum>k<Suc m. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<m. inverse (f (k + 1)) * inverse (x ^ k)) / x
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<Sum>k<Suc m. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<m. inverse (f (k + 1)) * inverse (x ^ k)) / x

goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
(\<Sum>k<Suc ?m2. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<?m2. inverse (f (k + 1)) * inverse (x ^ k)) / x

goal (3 subgoals):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
 2. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 3. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
from this[of "pred_numeral n"]
[PROOF STATE]
proof (chain)
picking this:
(\<Sum>k<Suc (pred_numeral n). inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
[PROOF STEP]
show "(\<Sum>k<numeral n. inverse (f k) * inverse (x^k)) =
            inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k+1)) * inverse (x^k)) / x"
[PROOF STATE]
proof (prove)
using this:
(\<Sum>k<Suc (pred_numeral n). inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x

goal (1 subgoal):
 1. (\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x
[PROOF STEP]
by (simp add: numeral_eq_Suc)
[PROOF STATE]
proof (state)
this:
(\<Sum>k<numeral n. inverse (f k) * inverse (x ^ k)) = inverse (f 0) + (\<Sum>k<pred_numeral n. inverse (f (k + 1)) * inverse (x ^ k)) / x

goal (2 subgoals):
 1. (\<Sum>k<Suc 0. inverse (f k) * inverse (x ^ k)) = inverse (f 0)
 2. (\<Sum>k<0. inverse (f k) * inverse (x ^ k)) = (0::'a)
[PROOF STEP]
qed simp_all


[STATEMENT]
lemma Compl_set_less_Compl: "- A \<sqsubset> - B \<longleftrightarrow> B \<sqsubset> A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (- A \<sqsubset> - B) = (B \<sqsubset> A)
[PROOF STEP]
by(simp add: set_less_def Compl_set_less_eq_Compl)


[STATEMENT]
lemma closure_bounded_linear_image_subset:
  assumes f: "bounded_linear f"
  shows "f ` closure S \<subseteq> closure (f ` S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f ` closure S \<subseteq> closure (f ` S)
[PROOF STEP]
using linear_continuous_on [OF f] closed_closure closure_subset
[PROOF STATE]
proof (prove)
using this:
continuous_on ?s f
closed (closure ?S)
?S \<subseteq> closure ?S

goal (1 subgoal):
 1. f ` closure S \<subseteq> closure (f ` S)
[PROOF STEP]
by (rule image_closure_subset)


[STATEMENT]
lemma expands_to_div':
  assumes "basis_wf basis" "(f expands_to F) basis" "((\<lambda>x. inverse (g x)) expands_to G) basis"
  shows   "((\<lambda>x. f x / g x) expands_to F * G) basis"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((\<lambda>x. f x / g x) expands_to F * G) basis
[PROOF STEP]
using expands_to_mult[OF assms]
[PROOF STATE]
proof (prove)
using this:
((\<lambda>x. f x * inverse (g x)) expands_to F * G) basis

goal (1 subgoal):
 1. ((\<lambda>x. f x / g x) expands_to F * G) basis
[PROOF STEP]
by (simp add: field_split_simps)


[STATEMENT]
lemma pinv_inverts:
  assumes "pgte a b"
      and "ppos b"
    shows "pgte (pinv b) (pinv a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pgte (pinv b) (pinv a)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. pgte (pinv b) (pinv a)
[PROOF STEP]
have "Rep_prat a \<ge> Rep_prat b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Rep_prat b \<le> Rep_prat a
[PROOF STEP]
using assms(1) pgte.rep_eq
[PROOF STATE]
proof (prove)
using this:
pgte a b
pgte ?x ?xa = (Rep_prat ?xa \<le> Rep_prat ?x)

goal (1 subgoal):
 1. Rep_prat b \<le> Rep_prat a
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Rep_prat b \<le> Rep_prat a

goal (1 subgoal):
 1. pgte (pinv b) (pinv a)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Rep_prat b \<le> Rep_prat a
[PROOF STEP]
have "(Fract 1 1) / Rep_prat b \<ge> (Fract 1 1) / Rep_prat a"
[PROOF STATE]
proof (prove)
using this:
Rep_prat b \<le> Rep_prat a

goal (1 subgoal):
 1. Fract 1 1 / Rep_prat a \<le> Fract 1 1 / Rep_prat b
[PROOF STEP]
by (metis One_rat_def assms(2) frac_le le_numeral_extra(4) ppos.rep_eq zero_le_one)
[PROOF STATE]
proof (state)
this:
Fract 1 1 / Rep_prat a \<le> Fract 1 1 / Rep_prat b

goal (1 subgoal):
 1. pgte (pinv b) (pinv a)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Fract 1 1 / Rep_prat a \<le> Fract 1 1 / Rep_prat b
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Fract 1 1 / Rep_prat a \<le> Fract 1 1 / Rep_prat b

goal (1 subgoal):
 1. pgte (pinv b) (pinv a)
[PROOF STEP]
by (simp add: One_rat_def pdiv.rep_eq pgte.rep_eq pinv_def pwrite.rep_eq)
[PROOF STATE]
proof (state)
this:
pgte (pinv b) (pinv a)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma treap_unique:
  "\<lbrakk> treap t1; treap t2; set_tree t1 = set_tree t2; inj_on snd (set_tree t1) \<rbrakk>
  \<Longrightarrow> t1 = t2"
  for t1 t2 :: "('k::linorder * 'p::linorder) tree"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>treap t1; treap t2; set_tree t1 = set_tree t2; inj_on snd (set_tree t1)\<rbrakk> \<Longrightarrow> t1 = t2
[PROOF STEP]
by (metis treap_of_unique)


[STATEMENT]
lemma carrier_append_cols[simp, intro]:
  "A \<in> carrier_mat nr nc1 \<Longrightarrow>
   B \<in> carrier_mat nr nc2 \<Longrightarrow> (A @\<^sub>c B) \<in> carrier_mat nr (nc1 + nc2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>A \<in> carrier_mat nr nc1; B \<in> carrier_mat nr nc2\<rbrakk> \<Longrightarrow> A @\<^sub>c B \<in> carrier_mat nr (nc1 + nc2)
[PROOF STEP]
unfolding append_cols_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>A \<in> carrier_mat nr nc1; B \<in> carrier_mat nr nc2\<rbrakk> \<Longrightarrow> (A\<^sup>T @\<^sub>r B\<^sup>T)\<^sup>T \<in> carrier_mat nr (nc1 + nc2)
[PROOF STEP]
by auto