[STATEMENT]
lemma mem_val_alt_10_mem_equal_1: "mem_equal s1 s2 pa \<Longrightarrow>
mem_val_alt 10 ((pa AND 68719476732) + 1) s1 = mem_val_alt 10 ((pa AND 68719476732) + 1) s2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mem_equal s1 s2 pa \<Longrightarrow> mem_val_alt 10 ((pa AND 68719476732) + 1) s1 = mem_val_alt 10 ((pa AND 68719476732) + 1) s2
[PROOF STEP]
apply (simp add: mem_val_alt_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mem_equal s1 s2 pa \<Longrightarrow> (let r1 = mem s1 10 ((pa AND 68719476732) + 1) in if r1 = None then let r2 = mem s1 11 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = mem s1 8 ((pa AND 68719476732) + 1) in if r3 = None then mem s1 9 ((pa AND 68719476732) + 1) else r3 else r2 else if r1 = None \<and> uint 10 = 11 then let r2 = r1 in if r2 = None then let r3 = mem s1 8 ((pa AND 68719476732) + 1) in if r3 = None then mem s1 9 ((pa AND 68719476732) + 1) else r3 else r2 else r1) = (let r1 = mem s2 10 ((pa AND 68719476732) + 1) in if r1 = None then let r2 = mem s2 11 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = mem s2 8 ((pa AND 68719476732) + 1) in if r3 = None then mem s2 9 ((pa AND 68719476732) + 1) else r3 else r2 else if r1 = None \<and> uint 10 = 11 then let r2 = r1 in if r2 = None then let r3 = mem s2 8 ((pa AND 68719476732) + 1) in if r3 = None then mem s2 9 ((pa AND 68719476732) + 1) else r3 else r2 else r1)
[PROOF STEP]
apply (simp add: Let_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mem_equal s1 s2 pa \<Longrightarrow> (mem s1 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))))) \<and> ((\<exists>y. mem s1 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))))) \<and> ((\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))))) \<and> ((\<exists>y. mem s1 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))))))) \<and> ((\<exists>y. mem s1 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))))) \<and> ((\<exists>y. mem s1 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))))) \<and> ((\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))))) \<and> ((\<exists>y. mem s1 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s1 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s1 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1)))))))
[PROOF STEP]
apply (simp add: mem_equal_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mem s1 8 (pa AND 68719476732) = mem s2 8 (pa AND 68719476732) \<and> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 8 ((pa AND 68719476732) + 1) \<and> mem s1 8 ((pa AND 68719476732) + 2) = mem s2 8 ((pa AND 68719476732) + 2) \<and> mem s1 8 ((pa AND 68719476732) + 3) = mem s2 8 ((pa AND 68719476732) + 3) \<and> mem s1 9 (pa AND 68719476732) = mem s2 9 (pa AND 68719476732) \<and> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1) \<and> mem s1 9 ((pa AND 68719476732) + 2) = mem s2 9 ((pa AND 68719476732) + 2) \<and> mem s1 9 ((pa AND 68719476732) + 3) = mem s2 9 ((pa AND 68719476732) + 3) \<and> mem s1 10 (pa AND 68719476732) = mem s2 10 (pa AND 68719476732) \<and> mem s1 10 ((pa AND 68719476732) + 1) = mem s2 10 ((pa AND 68719476732) + 1) \<and> mem s1 10 ((pa AND 68719476732) + 2) = mem s2 10 ((pa AND 68719476732) + 2) \<and> mem s1 10 ((pa AND 68719476732) + 3) = mem s2 10 ((pa AND 68719476732) + 3) \<and> mem s1 11 (pa AND 68719476732) = mem s2 11 (pa AND 68719476732) \<and> mem s1 11 ((pa AND 68719476732) + 1) = mem s2 11 ((pa AND 68719476732) + 1) \<and> mem s1 11 ((pa AND 68719476732) + 2) = mem s2 11 ((pa AND 68719476732) + 2) \<and> mem s1 11 ((pa AND 68719476732) + 3) = mem s2 11 ((pa AND 68719476732) + 3) \<Longrightarrow> (mem s2 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 11 ((pa AND 68719476732) + 1)))) \<and> ((\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 11 ((pa AND 68719476732) + 1)))) \<and> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 11 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> (mem s2 11 ((pa AND 68719476732) + 1) = None \<longrightarrow> (mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 8 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 8 ((pa AND 68719476732) + 1))) \<and> ((\<exists>y. mem s2 10 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 10 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 11 ((pa AND 68719476732) + 1))))
[PROOF STEP]
by (metis option.distinct(1))


[STATEMENT]
lemma is_satis_g_i_upd2:
  assumes "eval_v i v s" and "is_satis ((i ( x \<mapsto> s))) c0" and "atom x \<sharp> G" and "wfG \<Theta> \<B> (G3@((x,b,c0)#\<^sub>\<Gamma>G))" and "wfV \<Theta> \<B> G v b" and "wfI \<Theta> (G3[x::=v]\<^sub>\<Gamma>\<^sub>v@G) i"
    and  "is_satis_g i (G3[x::=v]\<^sub>\<Gamma>\<^sub>v@G)"
  shows "is_satis_g (i ( x \<mapsto> s)) (G3@((x,b,c0)#\<^sub>\<Gamma>G))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> G3 @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f G3 @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; G3[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> G3[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> G3 @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
proof(induct G3 rule: \<Gamma>_induct)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 2. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
case GNil
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (2 subgoals):
 1. \<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 2. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
hence "is_satis_g (i(x \<mapsto> s)) G"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> G
[PROOF STEP]
using is_satis_g_i_upd
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
\<lbrakk>atom ?x \<sharp> ?G;  ?i \<Turnstile> ?G \<rbrakk> \<Longrightarrow>  ?i(?x \<mapsto> ?s) \<Turnstile> ?G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> G

goal (2 subgoals):
 1. \<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 2. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 i(x \<mapsto> s) \<Turnstile> G
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 i(x \<mapsto> s) \<Turnstile> G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
using GNil
[PROOF STATE]
proof (prove)
using this:
 i(x \<mapsto> s) \<Turnstile> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
using is_satis_g.simps append_g.simps
[PROOF STATE]
proof (prove)
using this:
 i(x \<mapsto> s) \<Turnstile> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f GNil @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> GNil[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
 ?i \<Turnstile> GNil  = True
 ?i \<Turnstile> (?x, ?b, ?c) #\<^sub>\<Gamma> ?G  = ( ?i \<Turnstile> ?c  \<and>  ?i \<Turnstile> ?G )
GNil @ ?g = ?g
(?xbc #\<^sub>\<Gamma> ?g1.0) @ ?g2.0 = ?xbc #\<^sub>\<Gamma> ?g1.0 @ ?g2.0

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> GNil @ (x, b, c0) #\<^sub>\<Gamma> G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
case (GCons x' b' c' \<Gamma>')
[PROOF STATE]
proof (state)
this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
hence "x\<noteq>x'"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. x \<noteq> x'
[PROOF STEP]
using wfG_cons_append
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ((?x', ?b', ?c') #\<^sub>\<Gamma> ?\<Gamma>') @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>  \<and> atom ?x' \<sharp> ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<and>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b'  \<and> ?x' \<noteq> ?x

goal (1 subgoal):
 1. x \<noteq> x'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
x \<noteq> x'

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
hence "is_satis_g i (((x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> (\<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v) @ G))"
[PROOF STATE]
proof (prove)
using this:
x \<noteq> x'

goal (1 subgoal):
 1.  i \<Turnstile> (x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
using subst_gv.simps GCons
[PROOF STATE]
proof (prove)
using this:
x \<noteq> x'
GNil[?x::=?v]\<^sub>\<Gamma>\<^sub>v = GNil
((?y, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>)[?x::=?v]\<^sub>\<Gamma>\<^sub>v = (if ?x = ?y then ?\<Gamma> else (?y, ?b, ?c[?x::=?v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> ?\<Gamma>[?x::=?v]\<^sub>\<Gamma>\<^sub>v)
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i \<Turnstile> (x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 i \<Turnstile> (x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
hence *:"is_satis i c'[x::=v]\<^sub>c\<^sub>v \<and> is_satis_g i ((\<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v) @ G)"
[PROOF STATE]
proof (prove)
using this:
 i \<Turnstile> (x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v  \<and>  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
using subst_gv.simps
[PROOF STATE]
proof (prove)
using this:
 i \<Turnstile> (x', b', c'[x::=v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
GNil[?x::=?v]\<^sub>\<Gamma>\<^sub>v = GNil
((?y, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>)[?x::=?v]\<^sub>\<Gamma>\<^sub>v = (if ?x = ?y then ?\<Gamma> else (?y, ?b, ?c[?x::=?v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> ?\<Gamma>[?x::=?v]\<^sub>\<Gamma>\<^sub>v)

goal (1 subgoal):
 1.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v  \<and>  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v  \<and>  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
have "is_satis_g (i(x \<mapsto> s)) ((x', b', c') #\<^sub>\<Gamma> (\<Gamma>'@  (x, b, c0) #\<^sub>\<Gamma> G))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
proof(subst is_satis_g.simps,rule)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1.  i(x \<mapsto> s) \<Turnstile> c'
 2.  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
show "is_satis (i(x \<mapsto> s)) c'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> c'
[PROOF STEP]
proof(subst subst_c_satis_full[symmetric])
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. i \<lbrakk> ?v \<rbrakk> ~ s
 2.  ?\<Theta> ; ?B ; ?\<Gamma>' @ (x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f c'
 3.  ?\<Theta> ; ?\<Gamma>'[x::=?v]\<^sub>\<Gamma>\<^sub>v @ ?\<Gamma> \<turnstile> i
 4.  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b
 5.  i \<Turnstile> c'[x::=?v]\<^sub>c\<^sub>v
[PROOF STEP]
show \<open>eval_v i v s\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v \<rbrakk> ~ s

goal (4 subgoals):
 1.  ?\<Theta> ; ?B ; ?\<Gamma>' @ (x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f c'
 2.  ?\<Theta> ; ?\<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ ?\<Gamma> \<turnstile> i
 3.  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b
 4.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
show \<open> \<Theta> ; \<B> ; ((x', b', c') #\<^sub>\<Gamma>\<Gamma>')@(x, b, c0) #\<^sub>\<Gamma> G \<turnstile>\<^sub>w\<^sub>f c' \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G   \<turnstile>\<^sub>w\<^sub>f c'
[PROOF STEP]
using GCons wfC_refl
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b', ?c') #\<^sub>\<Gamma> ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b', ?c') #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c'

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G   \<turnstile>\<^sub>w\<^sub>f c'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G   \<turnstile>\<^sub>w\<^sub>f c'

goal (3 subgoals):
 1.  \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 2.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 3.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
show \<open>wfI \<Theta> ((((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v) @ G) i\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i

goal (2 subgoals):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 2.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
show \<open> \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b

goal (1 subgoal):
 1.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
show \<open>is_satis i c'[x::=v]\<^sub>c\<^sub>v\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
 i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v  \<and>  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> c'

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
show "is_satis_g (i(x \<mapsto> s)) (\<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
proof(rule  GCons(1))
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. i \<lbrakk> v \<rbrakk> ~ s
 2.  i(x \<mapsto> s) \<Turnstile> c0
 3. atom x \<sharp> G
 4.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
 5.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 6.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 7.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
show \<open>eval_v i v s\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v \<rbrakk> ~ s

goal (6 subgoals):
 1.  i(x \<mapsto> s) \<Turnstile> c0
 2. atom x \<sharp> G
 3.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
 4.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 5.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 6.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
show \<open>is_satis (i(x \<mapsto> s)) c0\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> c0
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> c0
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> c0

goal (5 subgoals):
 1. atom x \<sharp> G
 2.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
 3.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 4.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 5.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
show \<open>atom x \<sharp> G\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom x \<sharp> G
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1. atom x \<sharp> G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom x \<sharp> G

goal (4 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
 2.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 3.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 4.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
show \<open> \<Theta> ; \<B>\<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
using GCons wfG_elims append_g.simps
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil ;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; \<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; ?c \<noteq> (TRUE); ?c \<noteq> (FALSE)\<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?c = (TRUE) \<or> ?c = (FALSE);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; \<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, FALSE) #\<^sub>\<Gamma> ?\<Gamma> ; \<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
GNil @ ?g = ?g
(?xbc #\<^sub>\<Gamma> ?g1.0) @ ?g2.0 = ?xbc #\<^sub>\<Gamma> ?g1.0 @ ?g2.0

goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G

goal (3 subgoals):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 2.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 3.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
show \<open>is_satis_g i (\<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G)\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
 i \<Turnstile> c'[x::=v]\<^sub>c\<^sub>v  \<and>  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (2 subgoals):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 2.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
[PROOF STEP]
show "wfI \<Theta> (\<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G) i"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
[PROOF STEP]
using GCons wfI_def subst_g_assoc_cons \<open>x\<noteq>x'\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G
 ?\<Theta> ; ?\<Gamma> \<turnstile> ?i = (\<forall>(x, b, c)\<in>toSet ?\<Gamma>. \<exists>s. Some s = ?i x \<and>  ?\<Theta>  \<turnstile> s : b)
?x \<noteq> ?x' \<Longrightarrow> ((?x', ?b', ?c') #\<^sub>\<Gamma> ?\<Gamma>')[?x::=?v]\<^sub>\<Gamma>\<^sub>v @ ?G = (?x', ?b', ?c'[?x::=?v]\<^sub>c\<^sub>v) #\<^sub>\<Gamma> ?\<Gamma>'[?x::=?v]\<^sub>\<Gamma>\<^sub>v @ ?G
x \<noteq> x'

goal (1 subgoal):
 1.  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
show "\<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b "
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
have "((x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G) = (((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G = ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G = ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G

goal (1 subgoal):
 1. \<And>xa ba c \<Gamma>'. \<lbrakk>\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ; i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> ((xa, ba, c) #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
(x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G = ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
(x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G = ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
using GCons
[PROOF STATE]
proof (prove)
using this:
 i(x \<mapsto> s) \<Turnstile> (x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
(x', b', c') #\<^sub>\<Gamma> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G = ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
\<lbrakk>i \<lbrakk> v \<rbrakk> ~ s ;  i(x \<mapsto> s) \<Turnstile> c0 ; atom x \<sharp> G;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G ;  \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b ;  \<Theta> ; \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i;  i \<Turnstile> \<Gamma>'[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<rbrakk> \<Longrightarrow>  i(x \<mapsto> s) \<Turnstile> \<Gamma>' @ (x, b, c0) #\<^sub>\<Gamma> G
i \<lbrakk> v \<rbrakk> ~ s
 i(x \<mapsto> s) \<Turnstile> c0
atom x \<sharp> G
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
 \<Theta> ; \<B> ; G \<turnstile>\<^sub>w\<^sub>f v : b
 \<Theta> ; ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G \<turnstile> i
 i \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>')[x::=v]\<^sub>\<Gamma>\<^sub>v @ G

goal (1 subgoal):
 1.  i(x \<mapsto> s) \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 i(x \<mapsto> s) \<Turnstile> ((x', b', c') #\<^sub>\<Gamma> \<Gamma>') @ (x, b, c0) #\<^sub>\<Gamma> G

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma "P \<and> Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<and> Q
[PROOF STEP]
apply (rule conjI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
nitpick [expect = genuine] 1
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
nitpick [expect = genuine] 2
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
nitpick [expect = genuine]
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
nitpick [card = 5, expect = genuine]
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
nitpick [sat_solver = SAT4J, expect = genuine] 2
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. P
 2. Q
[PROOF STEP]
oops