[STATEMENT]
lemma  push_forall_eval_AllQ : "\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs
[PROOF STEP]
proof(induction \<phi>)
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<forall>xs. eval (AllQ TrueF) xs = eval (push_forall (AllQ TrueF)) xs
 2. \<forall>xs. eval (AllQ FalseF) xs = eval (push_forall (AllQ FalseF)) xs
 3. \<And>x. \<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 5. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 6. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 7. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 8. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 9. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 10. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case TrueF
[PROOF STATE]
proof (state)
this:

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

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

goal (9 subgoals):
 1. \<forall>xs. eval (AllQ FalseF) xs = eval (push_forall (AllQ FalseF)) xs
 2. \<And>x. \<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs
 3. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 4. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 6. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 7. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 8. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 9. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>xs. eval (AllQ FalseF) xs = eval (push_forall (AllQ FalseF)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ FalseF) xs = eval (push_forall (AllQ FalseF)) xs

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

goal (8 subgoals):
 1. \<And>x. \<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 6. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 8. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs
[PROOF STEP]
using aEval_lowerAtom eval.simps(1) eval.simps(8) push_forall.simps(11)
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (fm.Atom ?A) \<Longrightarrow> aEval ?A (?x # ?L) = aEval (lowerAtom 0 1 ?A) ?L
eval (fm.Atom ?a) ?\<Gamma> = aEval ?a ?\<Gamma>
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))
push_forall (AllQ (fm.Atom ?a)) = (if freeIn 0 (fm.Atom ?a) then fm.Atom (lowerAtom 0 1 ?a) else AllQ (fm.Atom ?a))

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs
[PROOF STEP]
by presburger
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (fm.Atom x)) xs = eval (push_forall (AllQ (fm.Atom x))) xs

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (And \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "eval (AllQ (And \<phi>1 \<phi>2)) xs = (\<forall>x. eval \<phi>1 (x#xs) \<and> eval \<phi>2 (x#xs))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (AllQ (And \<phi>1 \<phi>2)) xs = (\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (AllQ (And \<phi>1 \<phi>2)) xs = (\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs))

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
eval (AllQ (And \<phi>1 \<phi>2)) xs = (\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs))

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "... = ((\<forall>x. eval \<phi>1 (x#xs)) \<and> (\<forall>x. eval \<phi>2 (x#xs)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs)) = ((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs)))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
(\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs)) = ((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs)))

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(\<forall>x. eval \<phi>1 (x # xs) \<and> eval \<phi>2 (x # xs)) = ((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs)))

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "... = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs))) = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
[PROOF STEP]
using And eval_and
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs
eval (PolyAtoms.and ?a ?b) ?L = (eval ?a ?L \<and> eval ?b ?L)

goal (1 subgoal):
 1. ((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs))) = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
((\<forall>x. eval \<phi>1 (x # xs)) \<and> (\<forall>x. eval \<phi>2 (x # xs))) = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs"
[PROOF STATE]
proof (prove)
using this:
eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs

goal (1 subgoal):
 1. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (AllQ (And \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) ?xs2

goal (7 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 5. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 7. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (AllQ (And \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) ?xs2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
eval (AllQ (And \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (And \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (And \<phi>1 \<phi>2))) xs

goal (6 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (Or \<phi>1 \<phi>2)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs

goal (6 subgoals):
 1. \<And>\<phi>1 \<phi>2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 4. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 6. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs
\<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
proof(cases "freeIn 0 \<phi>1")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>1

goal (2 subgoals):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
freeIn 0 \<phi>1
[PROOF STEP]
have h : "freeIn 0 \<phi>1"
[PROOF STATE]
proof (prove)
using this:
freeIn 0 \<phi>1

goal (1 subgoal):
 1. freeIn 0 \<phi>1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>1

goal (2 subgoals):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
freeIn 0 \<phi>1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
freeIn 0 \<phi>1

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
proof(cases "freeIn 0 \<phi>2")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>2

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>2

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
using eval_lowerFm h eval.simps(7)
[PROOF STATE]
proof (prove)
using this:
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
freeIn 0 \<phi>1
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. \<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
have h1 : "\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs"
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (1 subgoal):
 1. \<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
using h var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
freeIn 0 \<phi>1
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
using eval_lowerFm True eval.simps(7)
[PROOF STATE]
proof (prove)
using this:
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
freeIn 0 \<phi>2
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. \<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
have h2 : "\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs"
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (1 subgoal):
 1. \<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
using True var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
freeIn 0 \<phi>2
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by(simp add:h h1 h2 True eval_or)
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (2 subgoals):
 1. \<lbrakk>freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> freeIn 0 \<phi>2

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<not> freeIn 0 \<phi>2

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
using eval_lowerFm h eval.simps(7)
[PROOF STATE]
proof (prove)
using this:
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
freeIn 0 \<phi>1
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. \<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
have "\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs"
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (1 subgoal):
 1. \<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
using True var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
freeIn 0 \<phi>1
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs
[PROOF STEP]
have "eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs"
[PROOF STATE]
proof (prove)
using this:
\<forall>x. eval \<phi>1 (x # xs) = eval (lowerFm 0 1 \<phi>1) xs

goal (1 subgoal):
 1. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by(simp add:h False eval_or)
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (1 subgoal):
 1. \<lbrakk>freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (1 subgoal):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> freeIn 0 \<phi>1

goal (1 subgoal):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> freeIn 0 \<phi>1
[PROOF STEP]
have h : "\<not>freeIn 0 \<phi>1"
[PROOF STATE]
proof (prove)
using this:
\<not> freeIn 0 \<phi>1

goal (1 subgoal):
 1. \<not> freeIn 0 \<phi>1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<not> freeIn 0 \<phi>1

goal (1 subgoal):
 1. \<lbrakk>\<forall>xs. eval (AllQ \<phi>1) xs = eval (push_forall (AllQ \<phi>1)) xs; \<forall>xs. eval (AllQ \<phi>2) xs = eval (push_forall (AllQ \<phi>2)) xs; \<not> freeIn 0 \<phi>1\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> freeIn 0 \<phi>1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<not> freeIn 0 \<phi>1

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
proof(cases "freeIn 0 \<phi>2")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>2

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
freeIn 0 \<phi>2

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
have "\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
using eval_lowerFm True eval.simps(7)
[PROOF STATE]
proof (prove)
using this:
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
freeIn 0 \<phi>2
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. \<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
have "\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs"
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (1 subgoal):
 1. \<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
using True var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<exists>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
freeIn 0 \<phi>2
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs
[PROOF STEP]
have "eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs"
[PROOF STATE]
proof (prove)
using this:
\<forall>x. eval \<phi>2 (x # xs) = eval (lowerFm 0 1 \<phi>2) xs

goal (1 subgoal):
 1. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by(simp add:h True eval_or)
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (2 subgoals):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
 2. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
eval (AllQ (Or \<phi>1 \<phi>2)) ?xs2 = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (1 subgoal):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> freeIn 0 \<phi>2

goal (1 subgoal):
 1. \<lbrakk>\<not> freeIn 0 \<phi>1; \<not> freeIn 0 \<phi>2\<rbrakk> \<Longrightarrow> \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> freeIn 0 \<phi>2
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<not> freeIn 0 \<phi>2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs
[PROOF STEP]
by(simp add:h False eval_or)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Or \<phi>1 \<phi>2)) xs = eval (push_forall (AllQ (Or \<phi>1 \<phi>2))) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (Neg \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "freeIn 0 (Neg \<phi>) \<Longrightarrow> (eval (ExQ (Neg \<phi>)) xs) = eval (AllQ (Neg \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
using var_not_in_eval2 eval.simps(7) eval.simps(8)
[PROOF STATE]
proof (prove)
using this:
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
have h : "freeIn 0 (Neg \<phi>) \<Longrightarrow> (eval (lowerFm 0 1 (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs)"
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs

goal (1 subgoal):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
using eval_lowerFm
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (ExQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs

goal (1 subgoal):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "eval (push_forall (AllQ (Neg \<phi>))) xs =
      eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (push_forall (AllQ (Neg \<phi>))) xs = eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (Neg \<phi>))) xs = eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (Neg \<phi>))) xs = eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "... = eval (AllQ (Neg \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
apply(cases "freeIn 0 (Neg \<phi>)")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
 2. \<not> freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
using h
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs

goal (2 subgoals):
 1. freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
 2. \<not> freeIn 0 (Neg \<phi>) \<Longrightarrow> eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
by(simp_all)
[PROOF STATE]
proof (state)
this:
eval (if freeIn 0 (Neg \<phi>) then lowerFm 0 1 (Neg \<phi>) else AllQ (Neg \<phi>)) xs = eval (AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (Neg \<phi>))) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
have "eval (push_forall (AllQ (Neg \<phi>))) xs = eval (AllQ (Neg \<phi>)) xs"
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (Neg \<phi>))) xs = eval (AllQ (Neg \<phi>)) xs

goal (1 subgoal):
 1. eval (push_forall (AllQ (Neg \<phi>))) xs = eval (AllQ (Neg \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (Neg \<phi>))) xs = eval (AllQ (Neg \<phi>)) xs

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (Neg \<phi>))) ?xs2 = eval (AllQ (Neg \<phi>)) ?xs2

goal (5 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 3. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 5. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (Neg \<phi>))) ?xs2 = eval (AllQ (Neg \<phi>)) ?xs2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (Neg \<phi>))) ?xs2 = eval (AllQ (Neg \<phi>)) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (Neg \<phi>)) xs = eval (push_forall (AllQ (Neg \<phi>))) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (ExQ \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "freeIn 0 (ExQ \<phi>) \<Longrightarrow> (eval (ExQ (ExQ \<phi>)) xs) = eval (AllQ (ExQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
using var_not_in_eval2 eval.simps(7) eval.simps(8)
[PROOF STATE]
proof (prove)
using this:
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
have h : "freeIn 0 (ExQ \<phi>) \<Longrightarrow> (eval (lowerFm 0 1 (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs)"
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs

goal (1 subgoal):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
using eval_lowerFm
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (ExQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs

goal (1 subgoal):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "eval (push_forall (AllQ (ExQ \<phi>))) xs =
      eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "... = eval (AllQ (ExQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
apply(cases "freeIn 0 (ExQ \<phi>)")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
 2. \<not> freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
using h
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs

goal (2 subgoals):
 1. freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
 2. \<not> freeIn 0 (ExQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
by(simp_all)
[PROOF STATE]
proof (state)
this:
eval (if freeIn 0 (ExQ \<phi>) then lowerFm 0 1 (ExQ \<phi>) else AllQ (ExQ \<phi>)) xs = eval (AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
have "eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (AllQ (ExQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (AllQ (ExQ \<phi>)) xs

goal (1 subgoal):
 1. eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (AllQ (ExQ \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (ExQ \<phi>))) xs = eval (AllQ (ExQ \<phi>)) xs

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (ExQ \<phi>))) ?xs2 = eval (AllQ (ExQ \<phi>)) ?xs2

goal (4 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
 2. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 4. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (ExQ \<phi>))) ?xs2 = eval (AllQ (ExQ \<phi>)) ?xs2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (ExQ \<phi>))) ?xs2 = eval (AllQ (ExQ \<phi>)) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (ExQ \<phi>)) xs = eval (push_forall (AllQ (ExQ \<phi>))) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (AllQ \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
fix xs
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "freeIn 0 (AllQ \<phi>) \<Longrightarrow> (eval (ExQ (AllQ \<phi>)) xs) = eval (AllQ (AllQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
using var_not_in_eval2 eval.simps(7) eval.simps(8)
[PROOF STATE]
proof (prove)
using this:
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))

goal (1 subgoal):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
have h : "freeIn 0 (AllQ \<phi>) \<Longrightarrow> (eval (lowerFm 0 1 (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs)"
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs

goal (1 subgoal):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
using eval_lowerFm
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (ExQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs

goal (1 subgoal):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "eval (push_forall (AllQ (AllQ \<phi>))) xs =
      eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
have "... = eval (AllQ (AllQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
apply(cases "freeIn 0 (AllQ \<phi>)")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
 2. \<not> freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
using h AllQ
[PROOF STATE]
proof (prove)
using this:
freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (lowerFm 0 1 (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (2 subgoals):
 1. freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
 2. \<not> freeIn 0 (AllQ \<phi>) \<Longrightarrow> eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
by(simp_all)
[PROOF STATE]
proof (state)
this:
eval (if freeIn 0 (AllQ \<phi>) then lowerFm 0 1 (AllQ \<phi>) else AllQ (AllQ \<phi>)) xs = eval (AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
have "eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (AllQ (AllQ \<phi>)) xs"
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (AllQ (AllQ \<phi>)) xs

goal (1 subgoal):
 1. eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (AllQ (AllQ \<phi>)) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (AllQ \<phi>))) xs = eval (AllQ (AllQ \<phi>)) xs

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
eval (push_forall (AllQ (AllQ \<phi>))) ?xs2 = eval (AllQ (AllQ \<phi>)) ?xs2

goal (3 subgoals):
 1. \<And>\<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 3. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
eval (push_forall (AllQ (AllQ \<phi>))) ?xs2 = eval (AllQ (AllQ \<phi>)) ?xs2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
eval (push_forall (AllQ (AllQ \<phi>))) ?xs2 = eval (AllQ (AllQ \<phi>)) ?xs2

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (AllQ \<phi>)) xs = eval (push_forall (AllQ (AllQ \<phi>))) xs

goal (2 subgoals):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (ExN x1 \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (2 subgoals):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
 2. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
[PROOF STEP]
using eval.simps(7) eval.simps(8) eval_lowerFm push_forall.simps(17) var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
push_forall (AllQ (ExN ?v ?va)) = (if freeIn 0 (ExN ?v ?va) then lowerFm 0 1 (ExN ?v ?va) else AllQ (ExN ?v ?va))
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs
[PROOF STEP]
by presburger
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (ExN x1 \<phi>)) xs = eval (push_forall (AllQ (ExN x1 \<phi>))) xs

goal (1 subgoal):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
case (AllN x1 \<phi>)
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (1 subgoal):
 1. \<And>x1 \<phi>. \<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs \<Longrightarrow> \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
using eval.simps(7) eval.simps(8) eval_lowerFm push_forall.simps(18) var_not_in_eval2
[PROOF STATE]
proof (prove)
using this:
\<forall>xs. eval (AllQ \<phi>) xs = eval (push_forall (AllQ \<phi>)) xs
eval (ExQ ?\<phi>) ?\<Gamma> = (\<exists>x. eval ?\<phi> (x # ?\<Gamma>))
eval (AllQ ?\<phi>) ?\<Gamma> = (\<forall>x. eval ?\<phi> (x # ?\<Gamma>))
freeIn 0 ?F \<Longrightarrow> \<forall>xs. eval (lowerFm 0 1 ?F) xs = eval (ExQ ?F) xs
push_forall (AllQ (AllN ?v ?va)) = (if freeIn 0 (AllN ?v ?va) then lowerFm 0 1 (AllN ?v ?va) else AllQ (AllN ?v ?va))
\<forall>L. freeIn 0 ?\<phi> \<longrightarrow> (\<exists>x. eval ?\<phi> (x # L)) = (\<forall>x. eval ?\<phi> (x # L))

goal (1 subgoal):
 1. \<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs
[PROOF STEP]
by presburger
[PROOF STATE]
proof (state)
this:
\<forall>xs. eval (AllQ (AllN x1 \<phi>)) xs = eval (push_forall (AllQ (AllN x1 \<phi>))) xs

goal:
No subgoals!
[PROOF STEP]
qed