[STATEMENT]
lemma mem_val_alt_8_mem_equal_1: "mem_equal s1 s2 pa \<Longrightarrow>
mem_val_alt 8 ((pa AND 68719476732) + 1) s1 = mem_val_alt 8 ((pa AND 68719476732) + 1) s2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mem_equal s1 s2 pa \<Longrightarrow> mem_val_alt 8 ((pa AND 68719476732) + 1) s1 = mem_val_alt 8 ((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 8 ((pa AND 68719476732) + 1) in if r1 = None then let r2 = mem s1 9 ((pa AND 68719476732) + 1) in r2 else if r1 = None \<and> uint 8 = 9 then let r2 = r1 in r2 else if r1 = None \<and> uint 8 = 10 then let r2 = mem s1 11 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = r1 in if r3 = None then mem s1 9 ((pa AND 68719476732) + 1) else r3 else r2 else if r1 = None \<and> uint 8 = 11 then let r2 = mem s1 10 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = r1 in if r3 = None then mem s1 9 ((pa AND 68719476732) + 1) else r3 else r2 else r1) = (let r1 = mem s2 8 ((pa AND 68719476732) + 1) in if r1 = None then let r2 = mem s2 9 ((pa AND 68719476732) + 1) in r2 else if r1 = None \<and> uint 8 = 9 then let r2 = r1 in r2 else if r1 = None \<and> uint 8 = 10 then let r2 = mem s2 11 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = r1 in if r3 = None then mem s2 9 ((pa AND 68719476732) + 1) else r3 else r2 else if r1 = None \<and> uint 8 = 11 then let r2 = mem s2 10 ((pa AND 68719476732) + 1) in if r2 = None then let r3 = r1 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 9 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 9 ((pa AND 68719476732) + 1) = mem s2 8 ((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 8 ((pa AND 68719476732) + 1) = mem s2 9 ((pa AND 68719476732) + 1)) \<and> ((\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s1 8 ((pa AND 68719476732) + 1) = mem s2 8 ((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> (\<exists>y. mem s2 8 ((pa AND 68719476732) + 1) = Some y) \<longrightarrow> mem s2 8 ((pa AND 68719476732) + 1) = None \<longrightarrow> None = mem s2 9 ((pa AND 68719476732) + 1)
[PROOF STEP]
by (metis option.distinct(1))


[STATEMENT]
lemma chine_assoc'_props:
    shows "\<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>"
    and "Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1"
    and "Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0"
    and "Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright> &&& Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1) &&& Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0 &&& Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
 2. Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1
 3. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
 4. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
have 1: "\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
[PROOF STEP]
using \<mu>\<nu>.are_identities \<nu>\<pi>.are_identities \<mu>\<nu>.composable \<nu>\<pi>.composable
              src_def trg_def C.pullback_commutes [of \<mu>.leg0 "\<nu>.leg1 \<cdot> \<p>\<^sub>1[\<nu>.leg0, \<pi>.leg1]"]
              C.comp_assoc
[PROOF STATE]
proof (prove)
using this:
ide \<mu>
ide \<nu>
ide \<nu>
ide \<pi>
src \<mu> = trg \<nu>
src \<nu> = trg \<pi>
src ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg0 (Dom ?\<mu>))) else null
trg ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg1 (Dom ?\<mu>))) else null
C.cospan \<mu>.leg0 (\<nu>.leg1 \<cdot> \<nu>\<pi>.prj\<^sub>1) \<Longrightarrow> C.commutative_square \<mu>.leg0 (\<nu>.leg1 \<cdot> \<nu>\<pi>.prj\<^sub>1) Prj\<^sub>1 \<p>\<^sub>0[\<mu>.leg0, \<nu>.leg1 \<cdot> \<nu>\<pi>.prj\<^sub>1]
(?h \<cdot> ?g) \<cdot> ?f = ?h \<cdot> ?g \<cdot> ?f

goal (1 subgoal):
 1. \<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0

goal (4 subgoals):
 1. \<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
 2. Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1
 3. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
 4. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
have 2: "\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0
[PROOF STEP]
by (metis C.comp_assoc C.pullback_commutes' \<nu>\<pi>.legs_form_cospan(1))
[PROOF STATE]
proof (state)
this:
\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0

goal (4 subgoals):
 1. \<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
 2. Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1
 3. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
 4. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
show "\<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
[PROOF STEP]
unfolding chine_assoc'_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>\<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
[PROOF STEP]
using \<mu>\<nu>.are_identities \<nu>\<pi>.are_identities \<mu>\<nu>.composable \<nu>\<pi>.composable 1 2
              src_def trg_def chine_composite C.comp_assoc
[PROOF STATE]
proof (prove)
using this:
ide \<mu>
ide \<nu>
ide \<nu>
ide \<pi>
src \<mu> = trg \<nu>
src \<nu> = trg \<pi>
\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0
src ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg0 (Dom ?\<mu>))) else null
trg ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg1 (Dom ?\<mu>))) else null
\<mu>\<nu>_\<pi>.chine = \<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0 \<down>\<down> \<pi>.leg1
\<mu>\<nu>\<pi>.chine = \<mu>.leg0 \<down>\<down> \<nu>.leg1 \<cdot> \<nu>\<pi>.prj\<^sub>1
(?h \<cdot> ?g) \<cdot> ?f = ?h \<cdot> ?g \<cdot> ?f

goal (1 subgoal):
 1. \<guillemotleft>\<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<guillemotleft>chine_assoc' : \<mu>\<nu>\<pi>.chine \<rightarrow>\<^sub>C \<mu>\<nu>_\<pi>.chine\<guillemotright>

goal (3 subgoals):
 1. Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1
 2. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
 3. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
show "Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1
[PROOF STEP]
unfolding chine_assoc'_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>1\<^sub>1 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>1
[PROOF STEP]
using \<mu>\<nu>.are_identities \<nu>\<pi>.are_identities \<mu>\<nu>.composable \<nu>\<pi>.composable 1 2
                src_def trg_def C.comp_assoc
[PROOF STATE]
proof (prove)
using this:
ide \<mu>
ide \<nu>
ide \<nu>
ide \<pi>
src \<mu> = trg \<nu>
src \<nu> = trg \<pi>
\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0
src ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg0 (Dom ?\<mu>))) else null
trg ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg1 (Dom ?\<mu>))) else null
(?h \<cdot> ?g) \<cdot> ?f = ?h \<cdot> ?g \<cdot> ?f

goal (1 subgoal):
 1. Prj\<^sub>1\<^sub>1 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>1
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Prj\<^sub>1\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1

goal (2 subgoals):
 1. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
 2. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
show "Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0
[PROOF STEP]
unfolding chine_assoc'_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>0\<^sub>1 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>1\<^sub>0
[PROOF STEP]
using \<mu>\<nu>.are_identities \<nu>\<pi>.are_identities \<mu>\<nu>.composable \<nu>\<pi>.composable 1 2
              src_def trg_def C.comp_assoc
[PROOF STATE]
proof (prove)
using this:
ide \<mu>
ide \<nu>
ide \<nu>
ide \<pi>
src \<mu> = trg \<nu>
src \<nu> = trg \<pi>
\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0
src ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg0 (Dom ?\<mu>))) else null
trg ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg1 (Dom ?\<mu>))) else null
(?h \<cdot> ?g) \<cdot> ?f = ?h \<cdot> ?g \<cdot> ?f

goal (1 subgoal):
 1. Prj\<^sub>0\<^sub>1 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>1\<^sub>0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Prj\<^sub>0\<^sub>1 \<cdot> chine_assoc' = Prj\<^sub>1\<^sub>0

goal (1 subgoal):
 1. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
show "Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0
[PROOF STEP]
unfolding chine_assoc'_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Prj\<^sub>0 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>0\<^sub>0
[PROOF STEP]
using \<mu>\<nu>.are_identities \<nu>\<pi>.are_identities \<mu>\<nu>.composable \<nu>\<pi>.composable 1 2
              src_def trg_def C.comp_assoc
[PROOF STATE]
proof (prove)
using this:
ide \<mu>
ide \<nu>
ide \<nu>
ide \<pi>
src \<mu> = trg \<nu>
src \<nu> = trg \<pi>
\<mu>.leg0 \<cdot> Prj\<^sub>1 = \<nu>.leg1 \<cdot> Prj\<^sub>1\<^sub>0
\<nu>.leg0 \<cdot> Prj\<^sub>1\<^sub>0 = \<pi>.leg1 \<cdot> Prj\<^sub>0\<^sub>0
src ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg0 (Dom ?\<mu>))) else null
trg ?\<mu> \<equiv> if arr ?\<mu> then mkObj (C.cod (Leg1 (Dom ?\<mu>))) else null
(?h \<cdot> ?g) \<cdot> ?f = ?h \<cdot> ?g \<cdot> ?f

goal (1 subgoal):
 1. Prj\<^sub>0 \<cdot> \<langle>\<langle>Prj\<^sub>1 \<lbrakk>\<mu>.leg0, \<nu>.leg1\<rbrakk> Prj\<^sub>1\<^sub>0\<rangle> \<lbrakk>\<nu>.leg0 \<cdot> \<mu>\<nu>.prj\<^sub>0, \<pi>.leg1\<rbrakk> Prj\<^sub>0\<^sub>0\<rangle> = Prj\<^sub>0\<^sub>0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Prj\<^sub>0 \<cdot> chine_assoc' = Prj\<^sub>0\<^sub>0

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma fetch_wcode_prepare_tm[simp]:
  "fetch wcode_prepare_tm (Suc 0) Bk = (WO, 2)"
  "fetch wcode_prepare_tm (Suc 0) Oc = (L, 1)"
  "fetch wcode_prepare_tm (Suc (Suc 0)) Bk = (L, 3)"
  "fetch wcode_prepare_tm (Suc (Suc 0)) Oc = (R, 2)"
  "fetch wcode_prepare_tm (Suc (Suc (Suc 0))) Bk = (R, 4)"
  "fetch wcode_prepare_tm (Suc (Suc (Suc 0))) Oc = (WB, 3)"
  "fetch wcode_prepare_tm 4 Bk = (R, 4)"
  "fetch wcode_prepare_tm 4 Oc = (R, 5)"
  "fetch wcode_prepare_tm 5 Oc = (R, 5)"
  "fetch wcode_prepare_tm 5 Bk = (R, 6)"
  "fetch wcode_prepare_tm 6 Oc = (R, 5)"
  "fetch wcode_prepare_tm 6 Bk = (R, 7)"
  "fetch wcode_prepare_tm 7 Oc = (L, 0)"
  "fetch wcode_prepare_tm 7 Bk = (WO, 7)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((fetch wcode_prepare_tm (Suc 0) Bk = (WO, 2) &&& fetch wcode_prepare_tm (Suc 0) Oc = (L, 1) &&& fetch wcode_prepare_tm (Suc (Suc 0)) Bk = (L, 3)) &&& (fetch wcode_prepare_tm (Suc (Suc 0)) Oc = (R, 2) &&& fetch wcode_prepare_tm (Suc (Suc (Suc 0))) Bk = (R, 4)) &&& fetch wcode_prepare_tm (Suc (Suc (Suc 0))) Oc = (WB, 3) &&& fetch wcode_prepare_tm 4 Bk = (R, 4)) &&& (fetch wcode_prepare_tm 4 Oc = (R, 5) &&& fetch wcode_prepare_tm 5 Oc = (R, 5) &&& fetch wcode_prepare_tm 5 Bk = (R, 6)) &&& (fetch wcode_prepare_tm 6 Oc = (R, 5) &&& fetch wcode_prepare_tm 6 Bk = (R, 7)) &&& fetch wcode_prepare_tm 7 Oc = (L, 0) &&& fetch wcode_prepare_tm 7 Bk = (WO, 7)
[PROOF STEP]
unfolding fetch.simps wcode_prepare_tm_def nth_of.simps
    numeral_eqs_upto_12
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (((case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * 0 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * 0)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (WO, Suc 1) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * 0 + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * 0 + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (L, 1) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc 0 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc 0)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (L, Suc (Suc 1))) &&& ((case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc 0 + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc 0 + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc 1) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc 0) then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc 0))) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc 1)))) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc 0) + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc 0) + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (WB, Suc (Suc 1)) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc 1) then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc 1))) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc 1)))) &&& ((case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc 1) + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc 1) + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc (Suc 1)))) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc 1)) + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc 1)) + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc (Suc 1)))) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc 1)) then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc 1)))) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc (Suc (Suc 1)))))) &&& ((case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc (Suc 1))) + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc (Suc 1))) + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc (Suc 1)))) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc (Suc 1))) then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc (Suc 1))))) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (R, Suc (Suc (Suc (Suc (Suc (Suc 1))))))) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc (Suc (Suc 1)))) + 1 then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc (Suc (Suc 1)))) + 1)) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (L, 0) &&& (case if length [(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] \<le> Suc 1 * Suc (Suc (Suc (Suc (Suc 1)))) then None else Some ([(WO, Suc 1), (L, 1), (L, Suc (Suc 1)), (R, Suc 1), (R, Suc (Suc (Suc 1))), (WB, Suc (Suc 1)), (R, Suc (Suc (Suc 1))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc 1))))), (R, Suc (Suc (Suc (Suc 1)))), (R, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (R, Suc (Suc (Suc (Suc 1)))), (WO, Suc (Suc (Suc (Suc (Suc (Suc 1)))))), (L, 0)] ! (Suc 1 * Suc (Suc (Suc (Suc (Suc 1)))))) of None \<Rightarrow> (Nop, 0) | Some i \<Rightarrow> i) = (WO, Suc (Suc (Suc (Suc (Suc (Suc 1))))))
[PROOF STEP]
by auto


[STATEMENT]
lemma insert_before_wf2_is_l_insert_before_wf2 [instances]:
  "l_insert_before_wf2 ShadowRootClass.type_wf ShadowRootClass.known_ptr ShadowRootClass.known_ptrs Shadow_DOM.insert_before
     Shadow_DOM.heap_is_wellformed"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. l_insert_before_wf2 ShadowRootClass.type_wf ShadowRootClass.known_ptr ShadowRootClass.known_ptrs Shadow_DOM.insert_before Shadow_DOM.heap_is_wellformed
[PROOF STEP]
apply(auto simp add: l_insert_before_wf2_def l_insert_before_wf2_axioms_def instances)[1]
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>h ptr child ref h'. \<lbrakk>Shadow_DOM.heap_is_wellformed h; ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> ShadowRootClass.type_wf h'
 2. \<And>h ptr child ref h'. \<lbrakk>Shadow_DOM.heap_is_wellformed h; ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> ShadowRootClass.known_ptrs h'
 3. \<And>h ptr child ref h'. \<lbrakk>ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; Shadow_DOM.heap_is_wellformed h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> Shadow_DOM.heap_is_wellformed h'
[PROOF STEP]
using insert_before_child_preserves
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Shadow_DOM.heap_is_wellformed ?h; ShadowRootClass.type_wf ?h; ShadowRootClass.known_ptrs ?h; ?h \<turnstile> Shadow_DOM.insert_before ?ptr ?node ?child \<rightarrow>\<^sub>h ?h'\<rbrakk> \<Longrightarrow> ShadowRootClass.type_wf ?h'
\<lbrakk>Shadow_DOM.heap_is_wellformed ?h; ShadowRootClass.type_wf ?h; ShadowRootClass.known_ptrs ?h; ?h \<turnstile> Shadow_DOM.insert_before ?ptr ?node ?child \<rightarrow>\<^sub>h ?h'\<rbrakk> \<Longrightarrow> ShadowRootClass.known_ptrs ?h'
\<lbrakk>Shadow_DOM.heap_is_wellformed ?h; ShadowRootClass.type_wf ?h; ShadowRootClass.known_ptrs ?h; ?h \<turnstile> Shadow_DOM.insert_before ?ptr ?node ?child \<rightarrow>\<^sub>h ?h'\<rbrakk> \<Longrightarrow> Shadow_DOM.heap_is_wellformed ?h'

goal (3 subgoals):
 1. \<And>h ptr child ref h'. \<lbrakk>Shadow_DOM.heap_is_wellformed h; ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> ShadowRootClass.type_wf h'
 2. \<And>h ptr child ref h'. \<lbrakk>Shadow_DOM.heap_is_wellformed h; ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> ShadowRootClass.known_ptrs h'
 3. \<And>h ptr child ref h'. \<lbrakk>ShadowRootClass.type_wf h; ShadowRootClass.known_ptrs h; Shadow_DOM.heap_is_wellformed h; h \<turnstile> Shadow_DOM.insert_before ptr child ref \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> Shadow_DOM.heap_is_wellformed h'
[PROOF STEP]
apply(fast, fast, fast)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done