[STATEMENT]
theorem Red1_exec1_FWwbisim:
  assumes wf: "wf_J1_prog P"
  shows "FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<tau>MOVE1 P) (\<tau>MOVE2 (compP2 P))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
let ?exec = "mexecd (compP2 P)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
let ?\<tau>exec = "\<lambda>t. \<tau>trsys.silent_moves (mexecd (compP2 P) t) (\<tau>MOVE2 (compP2 P))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
let ?\<tau>red = "\<lambda>t. \<tau>trsys.silent_moves (mred1 P t) (\<tau>MOVE1 P)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
interpret delay_bisimulation_diverge
    "mred1 P t" "?exec t" "wbisim1 t" "ta_bisim wbisim1" "\<tau>MOVE1 P" "\<tau>MOVE2 (compP2 P)"
    for t
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. delay_bisimulation_diverge (mred1 P t) (mexecd (compP2 P) t) (wbisim1 t) Red1_execd.ta_bisim_bisim_syntax (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
using wf
[PROOF STATE]
proof (prove)
using this:
wf_J1_prog P

goal (1 subgoal):
 1. delay_bisimulation_diverge (mred1 P t) (mexecd (compP2 P) t) (wbisim1 t) Red1_execd.ta_bisim_bisim_syntax (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
by(rule Red1_execd_delay_bisim)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t s1 s2
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume "wbisim1 t s1 s2" "(\<lambda>(x1, m). final_expr1 x1) s1"
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 s2
case s1 of (x1, m) \<Rightarrow> final_expr1 x1

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 s2
case s1 of (x1, m) \<Rightarrow> final_expr1 x1

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain e xs exs m1 where [simp]: "s1 = (((e, xs), exs), m1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>e xs exs m1. s1 = (((e, xs), exs), m1) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s1) auto
[PROOF STATE]
proof (state)
this:
s1 = (((e, xs), exs), m1)

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
s1 = (((e, xs), exs), m1)

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain xcp frs m2 where [simp]: "s2 = ((xcp, frs), m2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp frs m2. s2 = ((xcp, frs), m2) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s2) auto
[PROOF STATE]
proof (state)
this:
s2 = ((xcp, frs), m2)

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t s1 s2
case s1 of (x1, m) \<Rightarrow> final_expr1 x1
s1 = (((e, xs), exs), m1)
s2 = ((xcp, frs), m2)
[PROOF STEP]
have [simp]: "m2 = m1" "exs = []"
      and "bisim1_list1 t m1 (e, xs) [] xcp frs"
      and "final e"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t s1 s2
case s1 of (x1, m) \<Rightarrow> final_expr1 x1
s1 = (((e, xs), exs), m1)
s2 = ((xcp, frs), m2)

goal (1 subgoal):
 1. (m2 = m1 &&& exs = []) &&& bisim1_list1 t m1 (e, xs) [] xcp frs &&& final e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
m2 = m1
exs = []
bisim1_list1 t m1 (e, xs) [] xcp frs
final e

goal (7 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s1 of (x1, m) \<Rightarrow> final_expr1 x1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 3. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 4. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 5. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 7. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from \<open>bisim1_list1 t m1 (e, xs) [] xcp frs\<close> \<open>final e\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim1_list1 t m1 (e, xs) [] xcp frs
final e
[PROOF STEP]
show "\<exists>s2'. ?\<tau>exec t s2 s2' \<and> wbisim1 t s1 s2' \<and> (\<lambda>(x2, m). JVM_final x2) s2'"
[PROOF STATE]
proof (prove)
using this:
bisim1_list1 t m1 (e, xs) [] xcp frs
final e

goal (1 subgoal):
 1. \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>stk loc C M pc frsa Ts T body D. \<lbrakk>final e; frs = (stk, loc, C, M, pc) # frsa; compTP P \<turnstile> t:(xcp, m1, (stk, loc, C, M, pc) # frsa) \<surd>; P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp); max_vars e \<le> length xs; list_all2 (bisim1_fr P m1) [] frsa\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>v. \<lbrakk>final e; e = Val v; xcp = None; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 3. \<And>a. \<lbrakk>final e; e = Throw a; xcp = \<lfloor>a\<rfloor>; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
case (bl1_Normal stk loc C M pc frs' Ts T body D)
[PROOF STATE]
proof (state)
this:
frs = (stk, loc, C, M, pc) # frs'
compTP P \<turnstile> t:(xcp, m1, (stk, loc, C, M, pc) # frs') \<surd>
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
max_vars e \<le> length xs
list_all2 (bisim1_fr P m1) [] frs'

goal (3 subgoals):
 1. \<And>stk loc C M pc frsa Ts T body D. \<lbrakk>final e; frs = (stk, loc, C, M, pc) # frsa; compTP P \<turnstile> t:(xcp, m1, (stk, loc, C, M, pc) # frsa) \<surd>; P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp); max_vars e \<le> length xs; list_all2 (bisim1_fr P m1) [] frsa\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>v. \<lbrakk>final e; e = Val v; xcp = None; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 3. \<And>a. \<lbrakk>final e; e = Throw a; xcp = \<lfloor>a\<rfloor>; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
hence [simp]: "frs = [(stk, loc, C, M, pc)]"
        and conf: "compTP P \<turnstile> t:(xcp, m1, frs) \<surd>"
        and sees: "P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D"
        and bisim: "P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)"
        and var: "max_vars e \<le> length xs"
[PROOF STATE]
proof (prove)
using this:
frs = (stk, loc, C, M, pc) # frs'
compTP P \<turnstile> t:(xcp, m1, (stk, loc, C, M, pc) # frs') \<surd>
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
max_vars e \<le> length xs
list_all2 (bisim1_fr P m1) [] frs'

goal (1 subgoal):
 1. (frs = [(stk, loc, C, M, pc)] &&& compTP P \<turnstile> t:(xcp, m1, frs) \<surd>) &&& P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D &&& P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp) &&& max_vars e \<le> length xs
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
frs = [(stk, loc, C, M, pc)]
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
max_vars e \<le> length xs

goal (3 subgoals):
 1. \<And>stk loc C M pc frsa Ts T body D. \<lbrakk>final e; frs = (stk, loc, C, M, pc) # frsa; compTP P \<turnstile> t:(xcp, m1, (stk, loc, C, M, pc) # frsa) \<surd>; P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp); max_vars e \<le> length xs; list_all2 (bisim1_fr P m1) [] frsa\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>v. \<lbrakk>final e; e = Val v; xcp = None; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 3. \<And>a. \<lbrakk>final e; e = Throw a; xcp = \<lfloor>a\<rfloor>; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from \<open>final e\<close>
[PROOF STATE]
proof (chain)
picking this:
final e
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
final e

goal (1 subgoal):
 1. \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
fix v
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
assume [simp]: "e = Val v"
[PROOF STATE]
proof (state)
this:
e = Val v

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
with bisim
[PROOF STATE]
proof (chain)
picking this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
e = Val v
[PROOF STEP]
have [simp]: "xcp = None" "xs = loc"
          and exec: "\<tau>Exec_mover_a P t (blocks1 0 (Class D # Ts) body) m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)"
[PROOF STATE]
proof (prove)
using this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
e = Val v

goal (1 subgoal):
 1. (xcp = None &&& xs = loc) &&& \<tau>Exec_mover_a P t (blocks1 0 (Class D # Ts) body) m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)
[PROOF STEP]
by(auto dest!: bisim1Val2D1)
[PROOF STATE]
proof (state)
this:
xcp = None
xs = loc
\<tau>Exec_mover_a P t (blocks1 0 (Class D # Ts) body) m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from exec
[PROOF STATE]
proof (chain)
picking this:
\<tau>Exec_mover_a P t (blocks1 0 (Class D # Ts) body) m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)
[PROOF STEP]
have "\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)"
[PROOF STATE]
proof (prove)
using this:
\<tau>Exec_mover_a P t (blocks1 0 (Class D # Ts) body) m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)

goal (1 subgoal):
 1. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)
[PROOF STEP]
unfolding  \<tau>Exec_mover_blocks1
[PROOF STATE]
proof (prove)
using this:
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)

goal (1 subgoal):
 1. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
with sees
[PROOF STATE]
proof (chain)
picking this:
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)
[PROOF STEP]
have "\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])"
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) ([v], loc, length (compE2 body), None)

goal (1 subgoal):
 1. \<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])
[PROOF STEP]
by(auto intro: \<tau>Exec_mover_\<tau>Exec_1r)
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
with wt_compTP_compP2[OF wf]
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])
[PROOF STEP]
have execd: "\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])

goal (1 subgoal):
 1. \<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])
[PROOF STEP]
using conf
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>

goal (1 subgoal):
 1. \<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])
[PROOF STEP]
by(rule \<tau>Exec_1r_\<tau>Exec_1_dr)
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [([v], loc, C, M, length (compE2 body))])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from sees_method_compP[OF sees, of "\<lambda>C M Ts T. compMb2"] sees max_stack1[of body]
[PROOF STATE]
proof (chain)
picking this:
compP (\<lambda>C M Ts T. compMb2) P \<turnstile> C sees M: Ts\<rightarrow>T = map_option compMb2 \<lfloor>body\<rfloor> in D
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
1 \<le> max_stack body
[PROOF STEP]
have "\<tau>exec_1_d (compP2 P) t (None, m1, [([v], loc, C, M, length (compE2 body))]) (None, m1, [])"
[PROOF STATE]
proof (prove)
using this:
compP (\<lambda>C M Ts T. compMb2) P \<turnstile> C sees M: Ts\<rightarrow>T = map_option compMb2 \<lfloor>body\<rfloor> in D
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
1 \<le> max_stack body

goal (1 subgoal):
 1. \<tau>exec_1_d (compP2 P) t (None, m1, [([v], loc, C, M, length (compE2 body))]) (None, m1, [])
[PROOF STEP]
by(auto simp add: \<tau>exec_1_d_def compP2_def compMb2_def check_def has_methodI intro: exec_1I)
[PROOF STATE]
proof (state)
this:
\<tau>exec_1_d (compP2 P) t (None, m1, [([v], loc, C, M, length (compE2 body))]) (None, m1, [])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [])
[PROOF STEP]
have "?\<tau>exec t s2 ((None, []), m1)"
[PROOF STATE]
proof (prove)
using this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (None, m1, [])

goal (1 subgoal):
 1. execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)
[PROOF STEP]
unfolding \<tau>Exec_1_dr_conv_rtranclp
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t ((xcp, frs), m1) ((None, []), m1)

goal (1 subgoal):
 1. execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
have "JVM_final (None, [])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. JVM_final (None, [])
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
JVM_final (None, [])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
JVM_final (None, [])

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from conf
[PROOF STATE]
proof (chain)
picking this:
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>
[PROOF STEP]
have "hconf m1" "preallocated m1"
[PROOF STATE]
proof (prove)
using this:
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>

goal (1 subgoal):
 1. hconf m1 &&& preallocated m1
[PROOF STEP]
unfolding correct_state_def
[PROOF STATE]
proof (prove)
using this:
case (xcp, m1, frs) of (xp, h, frs) \<Rightarrow> compP2 P,h \<turnstile> t \<surd>t \<and> hconf h \<and> preallocated h \<and> (case frs of [] \<Rightarrow> True | f # fs \<Rightarrow> let (stk, loc, C, M, pc) = f in \<exists>Ts T mxs mxl\<^sub>0 is xt \<tau>. compP2 P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>(mxs, mxl\<^sub>0, is, xt)\<rfloor> in C \<and> compTP P C M ! pc = \<lfloor>\<tau>\<rfloor> \<and> conf_f (compP2 P) h \<tau> is f \<and> conf_fs (compP2 P) h (compTP P) M (length Ts) T fs \<and> conf_xcp (compP2 P) h xp (is ! pc))

goal (1 subgoal):
 1. hconf m1 &&& preallocated m1
[PROOF STEP]
by(simp_all)
[PROOF STATE]
proof (state)
this:
hconf m1
preallocated m1

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
hence "wbisim1 t s1 ((None, []), m1)"
[PROOF STATE]
proof (prove)
using this:
hconf m1
preallocated m1

goal (1 subgoal):
 1. wbisim1 t s1 ((None, []), m1)
[PROOF STEP]
by(auto intro: bisim1_list1.intros)
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 ((None, []), m1)

goal (2 subgoals):
 1. \<And>v. e = Val v \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)
JVM_final (None, [])
wbisim1 t s1 ((None, []), m1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t s2 ((None, []), m1)
JVM_final (None, [])
wbisim1 t s1 ((None, []), m1)

goal (1 subgoal):
 1. \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
fix a
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
assume [simp]: "e = throw (addr a)"
[PROOF STATE]
proof (state)
this:
e = Throw a

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
hence "\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)"
[PROOF STATE]
proof (prove)
using this:
e = Throw a

goal (1 subgoal):
 1. \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
proof(cases xcp)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>e = Throw a; xcp = None\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
 2. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
case None
[PROOF STATE]
proof (state)
this:
xcp = None

goal (2 subgoals):
 1. \<lbrakk>e = Throw a; xcp = None\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
 2. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
with bisim
[PROOF STATE]
proof (chain)
picking this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
xcp = None
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
xcp = None

goal (1 subgoal):
 1. \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
by(fastforce dest!: bisim1_Throw_\<tau>Exec_movet simp del: blocks1.simps intro: tranclp_into_rtranclp)
[PROOF STATE]
proof (state)
this:
\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
case (Some a')
[PROOF STATE]
proof (state)
this:
xcp = \<lfloor>a'\<rfloor>

goal (1 subgoal):
 1. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
with bisim
[PROOF STATE]
proof (chain)
picking this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
xcp = \<lfloor>a'\<rfloor>
[PROOF STEP]
have "a = a'"
[PROOF STATE]
proof (prove)
using this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
xcp = \<lfloor>a'\<rfloor>

goal (1 subgoal):
 1. a = a'
[PROOF STEP]
by(auto dest: bisim1_ThrowD)
[PROOF STATE]
proof (state)
this:
a = a'

goal (1 subgoal):
 1. \<And>aa. \<lbrakk>e = Throw a; xcp = \<lfloor>aa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
with Some bisim
[PROOF STATE]
proof (chain)
picking this:
xcp = \<lfloor>a'\<rfloor>
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
a = a'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
xcp = \<lfloor>a'\<rfloor>
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (e, xs) \<leftrightarrow> (stk, loc, pc, xcp)
a = a'

goal (1 subgoal):
 1. \<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
obtain stk' loc' pc'
          where exec: "\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>)"
          and bisim': "P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (throw (addr a), xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)"
[PROOF STATE]
proof (prove)
using this:
\<exists>stk' loc' pc'. \<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>) \<and> P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. (\<And>stk' loc' pc'. \<lbrakk>\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>); P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>)
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
with sees
[PROOF STATE]
proof (chain)
picking this:
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>)
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
have "\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])"
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D
\<tau>Exec_mover_a P t body m1 (stk, loc, pc, xcp) (stk', loc', pc', \<lfloor>a\<rfloor>)
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. \<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
[PROOF STEP]
by(auto intro: \<tau>Exec_mover_\<tau>Exec_1r)
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
with wt_compTP_compP2[OF wf]
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
[PROOF STEP]
have execd: "\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])

goal (1 subgoal):
 1. \<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
[PROOF STEP]
using conf
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1r (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>

goal (1 subgoal):
 1. \<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
[PROOF STEP]
by(rule \<tau>Exec_1r_\<tau>Exec_1_dr)
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from bisim1_xcp_Some_not_caught[OF bisim', of "\<lambda>C M Ts T. compMb2" 0 0]
[PROOF STATE]
proof (chain)
picking this:
match_ex_table (compP (\<lambda>C M Ts T. compMb2) P) (cname_of m1 a) (0 + pc') (compxE2 (blocks1 0 (Class D # Ts) body) 0 0) = None
[PROOF STEP]
have "match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None"
[PROOF STATE]
proof (prove)
using this:
match_ex_table (compP (\<lambda>C M Ts T. compMb2) P) (cname_of m1 a) (0 + pc') (compxE2 (blocks1 0 (Class D # Ts) body) 0 0) = None

goal (1 subgoal):
 1. match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None
[PROOF STEP]
by(simp add: compP2_def)
[PROOF STATE]
proof (state)
this:
match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from bisim'
[PROOF STATE]
proof (chain)
picking this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)
[PROOF STEP]
have "pc' < length (compE2 body)"
[PROOF STATE]
proof (prove)
using this:
P,blocks1 0 (Class D # Ts) body,m1 \<turnstile> (Throw a, xs) \<leftrightarrow> (stk', loc', pc', \<lfloor>a\<rfloor>)

goal (1 subgoal):
 1. pc' < length (compE2 body)
[PROOF STEP]
by(auto dest: bisim1_ThrowD)
[PROOF STATE]
proof (state)
this:
pc' < length (compE2 body)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None
pc' < length (compE2 body)
[PROOF STEP]
have "\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])"
[PROOF STATE]
proof (prove)
using this:
match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None
pc' < length (compE2 body)

goal (1 subgoal):
 1. \<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
[PROOF STEP]
using sees_method_compP[OF sees, of "\<lambda>C M Ts T. compMb2"] sees
[PROOF STATE]
proof (prove)
using this:
match_ex_table (compP2 P) (cname_of m1 a) pc' (compxE2 body 0 0) = None
pc' < length (compE2 body)
compP (\<lambda>C M Ts T. compMb2) P \<turnstile> C sees M: Ts\<rightarrow>T = map_option compMb2 \<lfloor>body\<rfloor> in D
P \<turnstile> C sees M: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D

goal (1 subgoal):
 1. \<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
[PROOF STEP]
by(auto simp add: \<tau>exec_1_def compP2_def compMb2_def has_methodI intro: exec_1I)
[PROOF STATE]
proof (state)
this:
\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from wt_compTP_compP2[OF wf] execd conf
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>
[PROOF STEP]
have "compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')])
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>

goal (1 subgoal):
 1. compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>
[PROOF STEP]
by(rule \<tau>Exec_1_dr_preserves_correct_state)
[PROOF STATE]
proof (state)
this:
compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>
[PROOF STEP]
have "\<tau>exec_1_d (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])"
[PROOF STATE]
proof (prove)
using this:
\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>

goal (1 subgoal):
 1. \<tau>exec_1_d (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
[PROOF STEP]
using wt_compTP_compP2[OF wf]
[PROOF STATE]
proof (prove)
using this:
\<tau>exec_1 (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
compTP P \<turnstile> t:(\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) \<surd>
wf_jvm_prog\<^bsub>compTP P\<^esub> (compP2 P)

goal (1 subgoal):
 1. \<tau>exec_1_d (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])
[PROOF STEP]
by(auto simp add: \<tau>exec_1_def \<tau>exec_1_d_def welltyped_commute[symmetric] elim: jvmd_NormalE)
[PROOF STATE]
proof (state)
this:
\<tau>exec_1_d (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<tau>exec_1_d (compP2 P) t (\<lfloor>a\<rfloor>, m1, [(stk', loc', C, M, pc')]) (\<lfloor>a\<rfloor>, m1, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [])
[PROOF STEP]
have "?\<tau>exec t s2 ((\<lfloor>a\<rfloor>, []), m1)"
[PROOF STATE]
proof (prove)
using this:
\<tau>Exec_1_dr (compP2 P) t (xcp, m1, frs) (\<lfloor>a\<rfloor>, m1, [])

goal (1 subgoal):
 1. execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)
[PROOF STEP]
unfolding \<tau>Exec_1_dr_conv_rtranclp
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t ((xcp, frs), m1) ((\<lfloor>a\<rfloor>, []), m1)

goal (1 subgoal):
 1. execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
have "JVM_final (\<lfloor>a\<rfloor>, [])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. JVM_final (\<lfloor>a\<rfloor>, [])
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
JVM_final (\<lfloor>a\<rfloor>, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
JVM_final (\<lfloor>a\<rfloor>, [])

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
from conf
[PROOF STATE]
proof (chain)
picking this:
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>
[PROOF STEP]
have "hconf m1" "preallocated m1"
[PROOF STATE]
proof (prove)
using this:
compTP P \<turnstile> t:(xcp, m1, frs) \<surd>

goal (1 subgoal):
 1. hconf m1 &&& preallocated m1
[PROOF STEP]
by(simp_all add: correct_state_def)
[PROOF STATE]
proof (state)
this:
hconf m1
preallocated m1

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
hence "wbisim1 t s1 ((\<lfloor>a\<rfloor>, []), m1)"
[PROOF STATE]
proof (prove)
using this:
hconf m1
preallocated m1

goal (1 subgoal):
 1. wbisim1 t s1 ((\<lfloor>a\<rfloor>, []), m1)
[PROOF STEP]
by(auto intro: bisim1_list1.intros)
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 ((\<lfloor>a\<rfloor>, []), m1)

goal (1 subgoal):
 1. \<And>a. e = Throw a \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)
JVM_final (\<lfloor>a\<rfloor>, [])
wbisim1 t s1 ((\<lfloor>a\<rfloor>, []), m1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t s2 ((\<lfloor>a\<rfloor>, []), m1)
JVM_final (\<lfloor>a\<rfloor>, [])
wbisim1 t s1 ((\<lfloor>a\<rfloor>, []), m1)

goal (1 subgoal):
 1. \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)

goal (2 subgoals):
 1. \<And>v. \<lbrakk>final e; e = Val v; xcp = None; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
 2. \<And>a. \<lbrakk>final e; e = Throw a; xcp = \<lfloor>a\<rfloor>; frs = []; hconf m1; preallocated m1\<rbrakk> \<Longrightarrow> \<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)
[PROOF STEP]
qed(auto intro!: exI bisim1_list1.intros)
[PROOF STATE]
proof (state)
this:
\<exists>s2'. execd_mthr.silent_moves (compP2 P) t s2 s2' \<and> wbisim1 t s1 s2' \<and> (case s2' of (x2, m) \<Rightarrow> JVM_final x2)

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t s1 s2
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume "wbisim1 t s1 s2" "(\<lambda>(x2, m). JVM_final x2) s2"
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 s2
case s2 of (x2, m) \<Rightarrow> JVM_final x2

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wbisim1 t s1 s2
case s2 of (x2, m) \<Rightarrow> JVM_final x2

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain e xs exs m1 where [simp]: "s1 = (((e, xs), exs), m1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>e xs exs m1. s1 = (((e, xs), exs), m1) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s1) auto
[PROOF STATE]
proof (state)
this:
s1 = (((e, xs), exs), m1)

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
s1 = (((e, xs), exs), m1)

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain xcp frs m2 where [simp]: "s2 = ((xcp, frs), m2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp frs m2. s2 = ((xcp, frs), m2) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases s2) auto
[PROOF STATE]
proof (state)
this:
s2 = ((xcp, frs), m2)

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t s1 s2
case s2 of (x2, m) \<Rightarrow> JVM_final x2
s1 = (((e, xs), exs), m1)
s2 = ((xcp, frs), m2)
[PROOF STEP]
have [simp]: "m2 = m1" "exs = []" "frs = []"
      and bisim: "bisim1_list1 t m1 (e, xs) [] xcp []"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t s1 s2
case s2 of (x2, m) \<Rightarrow> JVM_final x2
s1 = (((e, xs), exs), m1)
s2 = ((xcp, frs), m2)

goal (1 subgoal):
 1. (m2 = m1 &&& exs = [] &&& frs = []) &&& bisim1_list1 t m1 (e, xs) [] xcp []
[PROOF STEP]
by(auto elim: bisim1_list1.cases)
[PROOF STATE]
proof (state)
this:
m2 = m1
exs = []
frs = []
bisim1_list1 t m1 (e, xs) [] xcp []

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
hence "final e"
[PROOF STATE]
proof (prove)
using this:
m2 = m1
exs = []
frs = []
bisim1_list1 t m1 (e, xs) [] xcp []

goal (1 subgoal):
 1. final e
[PROOF STEP]
by(auto elim: bisim1_list1.cases)
[PROOF STATE]
proof (state)
this:
final e

goal (6 subgoals):
 1. \<And>t s1 s2. \<lbrakk>wbisim1 t s1 s2; case s2 of (x2, m) \<Rightarrow> JVM_final x2\<rbrakk> \<Longrightarrow> \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
 2. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 3. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 4. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 6. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
thus "\<exists>s1'. ?\<tau>red t s1 s1' \<and> wbisim1 t s1' s2 \<and> (\<lambda>(x1, m). final_expr1 x1) s1'"
[PROOF STATE]
proof (prove)
using this:
final e

goal (1 subgoal):
 1. \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
[PROOF STEP]
using bisim
[PROOF STATE]
proof (prove)
using this:
final e
bisim1_list1 t m1 (e, xs) [] xcp []

goal (1 subgoal):
 1. \<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>s1'. Red1_mthr.silent_moves True P t s1 s1' \<and> wbisim1 t s1' s2 \<and> (case s1' of (x1, m) \<Rightarrow> final_expr1 x1)

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume b: "wbisim1 t' (x, m1) (xx, m2)" and b': "wbisim1 t (x1, m1) (x2, m2)"
      and \<tau>red: "?\<tau>red t (x1, m1) (x1', m1)"
      and red: "mred1 P t (x1', m1) ta1 (x1'', m1')"
      and "\<not> \<tau>MOVE1 P (x1', m1) ta1 (x1'', m1')"
      and \<tau>exec: "?\<tau>exec t (x2, m2) (x2', m2)"
      and exec: "?exec t (x2', m2) ta2 (x2'', m2')"
      and "\<not> \<tau>MOVE2 (compP2 P) (x2', m2) ta2 (x2'', m2')"
      and b2: "wbisim1 t (x1'', m1') (x2'', m2')"
[PROOF STATE]
proof (state)
this:
wbisim1 t' (x, m1) (xx, m2)
wbisim1 t (x1, m1) (x2, m2)
Red1_mthr.silent_moves True P t (x1, m1) (x1', m1)
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
\<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1')
execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2)
execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'
\<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2')
wbisim1 t (x1'', m1') (x2'', m2')

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from red
[PROOF STATE]
proof (chain)
picking this:
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
[PROOF STEP]
have "hext m1 m1'"
[PROOF STATE]
proof (prove)
using this:
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'

goal (1 subgoal):
 1. m1 \<unlhd> m1'
[PROOF STEP]
by(auto simp add: split_beta intro: Red1_hext_incr)
[PROOF STATE]
proof (state)
this:
m1 \<unlhd> m1'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
m1 \<unlhd> m1'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from b2
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1'', m1') (x2'', m2')
[PROOF STEP]
have "m1' = m2'"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1'', m1') (x2'', m2')

goal (1 subgoal):
 1. m1' = m2'
[PROOF STEP]
by(cases x1'', cases x2'') simp
[PROOF STATE]
proof (state)
this:
m1' = m2'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
m1' = m2'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from b2
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1'', m1') (x2'', m2')
[PROOF STEP]
have "hconf m2'"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1'', m1') (x2'', m2')

goal (1 subgoal):
 1. hconf m2'
[PROOF STEP]
by(cases x1'', cases x2'')(auto elim!: bisim1_list1.cases simp add: correct_state_def)
[PROOF STATE]
proof (state)
this:
hconf m2'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
hconf m2'

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from b' exec
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1, m1) (x2, m2)
execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'
[PROOF STEP]
have "preallocated m2"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'

goal (1 subgoal):
 1. preallocated m2
[PROOF STEP]
by(cases x1, cases x2)(auto elim!: bisim1_list1.cases simp add: correct_state_def)
[PROOF STATE]
proof (state)
this:
preallocated m2

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
preallocated m2

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from b' \<tau>red red
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1, m1) (x2, m2)
Red1_mthr.silent_moves True P t (x1, m1) (x1', m1)
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
[PROOF STEP]
have tconf: "compP2 P,m2 \<turnstile> t \<surd>t"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
Red1_mthr.silent_moves True P t (x1, m1) (x1', m1)
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'

goal (1 subgoal):
 1. compP2 P,m2 \<turnstile> t \<surd>t
[PROOF STEP]
by(cases x1, cases x2)(auto elim!: bisim1_list1.cases Red1.cases simp add: correct_state_def \<tau>mreds1_Val_Nil \<tau>mreds1_Throw_Nil)
[PROOF STATE]
proof (state)
this:
compP2 P,m2 \<turnstile> t \<surd>t

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from \<tau>exec
[PROOF STATE]
proof (chain)
picking this:
execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2)
[PROOF STEP]
have \<tau>exec': "\<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')"
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2)

goal (1 subgoal):
 1. \<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')
[PROOF STEP]
unfolding \<tau>Exec_1_dr_conv_rtranclp
[PROOF STATE]
proof (prove)
using this:
execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2)

goal (1 subgoal):
 1. execd_mthr.silent_moves (compP2 P) t ((fst x2, snd x2), m2) ((fst x2', snd x2'), m2)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
with b' tconf
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1, m1) (x2, m2)
compP2 P,m2 \<turnstile> t \<surd>t
\<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')
[PROOF STEP]
have "compTP P \<turnstile> t: (fst x2', m2, snd x2') \<surd>"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
compP2 P,m2 \<turnstile> t \<surd>t
\<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')

goal (1 subgoal):
 1. compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>
[PROOF STEP]
using \<open>preallocated m2\<close>
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
compP2 P,m2 \<turnstile> t \<surd>t
\<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2')
preallocated m2

goal (1 subgoal):
 1. compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>
[PROOF STEP]
apply(cases x1, cases x2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>a b aa ba. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); compP2 P,m2 \<turnstile> t \<surd>t; \<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2'); preallocated m2; x1 = (a, b); wbisim1 t (x1, m1) (x2, m2); compP2 P,m2 \<turnstile> t \<surd>t; \<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2'); preallocated m2; x2 = (aa, ba)\<rbrakk> \<Longrightarrow> compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>
[PROOF STEP]
apply(erule \<tau>Exec_1_dr_preserves_correct_state[OF wt_compTP_compP2[OF wf]])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>a b aa ba. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); compP2 P,m2 \<turnstile> t \<surd>t; preallocated m2; x1 = (a, b); wbisim1 t (x1, m1) (x2, m2); compP2 P,m2 \<turnstile> t \<surd>t; \<tau>Exec_1_dr (compP2 P) t (fst x2, m2, snd x2) (fst x2', m2, snd x2'); preallocated m2; x2 = (aa, ba)\<rbrakk> \<Longrightarrow> compTP P \<turnstile> t:(fst x2, m2, snd x2) \<surd>
[PROOF STEP]
apply(auto elim!: bisim1_list1.cases simp add: correct_state_def)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>

goal (5 subgoals):
 1. \<And>t' x m1 xx m2 t x1 x2 x1' ta1 x1'' m1' x2' ta2 x2'' m2'. \<lbrakk>wbisim1 t' (x, m1) (xx, m2); wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
 2. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 3. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 5. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
m1 \<unlhd> m1'
m1' = m2'
hconf m2'
preallocated m2
compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>
[PROOF STEP]
show "wbisim1 t' (x, m1') (xx, m2')"
[PROOF STATE]
proof (prove)
using this:
m1 \<unlhd> m1'
m1' = m2'
hconf m2'
preallocated m2
compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>

goal (1 subgoal):
 1. wbisim1 t' (x, m1') (xx, m2')
[PROOF STEP]
using b exec
[PROOF STATE]
proof (prove)
using this:
m1 \<unlhd> m1'
m1' = m2'
hconf m2'
preallocated m2
compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>
wbisim1 t' (x, m1) (xx, m2)
execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'

goal (1 subgoal):
 1. wbisim1 t' (x, m1') (xx, m2')
[PROOF STEP]
apply(cases x, cases xx)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>a b aa ba. \<lbrakk>m1 \<unlhd> m1'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; wbisim1 t' (x, m1) (xx, m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; x = (a, b); m1 \<unlhd> m1'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; wbisim1 t' (x, m1) (xx, m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; xx = (aa, ba)\<rbrakk> \<Longrightarrow> wbisim1 t' (x, m1') (xx, m2')
[PROOF STEP]
apply(auto elim!: bisim1_list1.cases intro!: bisim1_list1.intros simp add: split_beta intro: preallocated_hext)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> compTP P \<turnstile> t':(xcpa, m2', (stka, loca, Ca, Ma, pca) # frsa) \<surd>
 2. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2' \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa)
 3. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> list_all2 (bisim1_fr P m2') exsa frsa
[PROOF STEP]
apply(erule (2) correct_state_heap_change[OF wt_compTP_compP2[OF wf]])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2' \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa)
 2. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> list_all2 (bisim1_fr P m2') exsa frsa
[PROOF STEP]
apply(erule (1) bisim1_hext_mono)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; list_all2 (bisim1_fr P m2) exsa frsa\<rbrakk> \<Longrightarrow> list_all2 (bisim1_fr P m2') exsa frsa
[PROOF STEP]
apply(erule List.list_all2_mono)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>Ts T body D xcpa stka loca Ca Ma pca frsa Tsa Ta bodya Da ea xsa exsa xs ys. \<lbrakk>compP2 P,t \<turnstile> Normal (fst x2', m2, snd x2') -ta2-jvmd\<rightarrow> Normal (fst x2'', m2', snd x2''); x = ((ea, xsa), exsa); m2 \<unlhd> m2'; m1' = m2'; hconf m2'; preallocated m2; compTP P \<turnstile> t:(fst x2', m2, snd x2') \<surd>; xx = (xcpa, (stka, loca, Ca, Ma, pca) # frsa); m1 = m2; P \<turnstile> Ca sees Ma: Ts\<rightarrow>T = \<lfloor>body\<rfloor> in D; P,{0:Class D=None; blocks1 (Suc 0) Ts body},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); compTP P \<turnstile> t':(xcpa, m2, (stka, loca, Ca, Ma, pca) # frsa) \<surd>; P \<turnstile> Ca sees Ma: Tsa\<rightarrow>Ta = \<lfloor>bodya\<rfloor> in Da; P,{0:Class Da=None; blocks1 (Suc 0) Tsa bodya},m2 \<turnstile> (ea, xsa) \<leftrightarrow> (stka, loca, pca, xcpa); max_vars ea \<le> length xsa; bisim1_fr P m2 xs ys\<rbrakk> \<Longrightarrow> bisim1_fr P m2' xs ys
[PROOF STEP]
apply(erule (1) bisim1_fr_hext_mono)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
wbisim1 t' (x, m1') (xx, m2')

goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume b: "wbisim1 t (x1, m1) (x2, m2)"
      and \<tau>red: "?\<tau>red t (x1, m1) (x1', m1)"
      and red: "mred1 P t (x1', m1) ta1 (x1'', m1')"
      and "\<not> \<tau>MOVE1 P (x1', m1) ta1 (x1'', m1')"
      and \<tau>exec: "?\<tau>exec t (x2, m2) (x2', m2)"
      and exec: "?exec t (x2', m2) ta2 (x2'', m2')"
      and "\<not> \<tau>MOVE2 (compP2 P) (x2', m2) ta2 (x2'', m2')"
      and b': "wbisim1 t (x1'', m1') (x2'', m2')"
      and "ta_bisim wbisim1 ta1 ta2"
      and Suspend: "Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>" "Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>"
[PROOF STATE]
proof (state)
this:
wbisim1 t (x1, m1) (x2, m2)
Red1_mthr.silent_moves True P t (x1, m1) (x1', m1)
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
\<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1')
execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2)
execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'
\<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2')
wbisim1 t (x1'', m1') (x2'', m2')
Red1_execd.ta_bisim_bisim_syntax ta1 ta2
Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>

goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from red Suspend
[PROOF STATE]
proof (chain)
picking this:
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>
[PROOF STEP]
have "call1 (fst (fst x1'')) \<noteq> None"
[PROOF STATE]
proof (prove)
using this:
Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'
Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>

goal (1 subgoal):
 1. call1 (fst (fst x1'')) \<noteq> None
[PROOF STEP]
by(cases x1')(cases x1'', auto dest: Red1_Suspend_is_call)
[PROOF STATE]
proof (state)
this:
call1 (fst (fst x1'')) \<noteq> None

goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
call1 (fst (fst x1'')) \<noteq> None

goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from mexecd_Suspend_Invoke[OF exec Suspend(2)]
[PROOF STATE]
proof (chain)
picking this:
\<exists>stk loc C M pc frs' n a T Ts Tr D. x2'' = (None, (stk, loc, C, M, pc) # frs') \<and> instrs_of (compP2 P) C M ! pc = Invoke wait n \<and> stk ! n = Addr a \<and> typeof_addr m2 a = \<lfloor>T\<rfloor> \<and> compP2 P \<turnstile> class_type_of T sees wait: Ts\<rightarrow>Tr = Native in D \<and> D\<bullet>wait(Ts) :: Tr
[PROOF STEP]
obtain xcp stk loc C M pc frs' M' n where "x2'' = (xcp, (stk, loc, C, M, pc) # frs')"
      "instrs_of (compP2 P) C M ! pc = Invoke M' n"
[PROOF STATE]
proof (prove)
using this:
\<exists>stk loc C M pc frs' n a T Ts Tr D. x2'' = (None, (stk, loc, C, M, pc) # frs') \<and> instrs_of (compP2 P) C M ! pc = Invoke wait n \<and> stk ! n = Addr a \<and> typeof_addr m2 a = \<lfloor>T\<rfloor> \<and> compP2 P \<turnstile> class_type_of T sees wait: Ts\<rightarrow>Tr = Native in D \<and> D\<bullet>wait(Ts) :: Tr

goal (1 subgoal):
 1. (\<And>xcp stk loc C M pc frs' M' n. \<lbrakk>x2'' = (xcp, (stk, loc, C, M, pc) # frs'); instrs_of (compP2 P) C M ! pc = Invoke M' n\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
x2'' = (xcp, (stk, loc, C, M, pc) # frs')
instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (4 subgoals):
 1. \<And>t x1 m1 x2 m2 x1' ta1 x1'' m1' x2' ta2 x2'' m2' w. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); Red1_mthr.silent_moves True P t (x1, m1) (x1', m1); Red1_mthr.r_syntax True P t x1' m1 ta1 x1'' m1'; \<not> (case (x1', m1) of (exexs, h) \<Rightarrow> \<lambda>ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) ta1 (x1'', m1'); execd_mthr.silent_moves (compP2 P) t (x2, m2) (x2', m2); execd_mthr.r_syntax (compP2 P) t x2' m2 ta2 x2'' m2'; \<not> (case (x2', m2) of (x, xa) \<Rightarrow> (case x of (xcp, frs) \<Rightarrow> \<lambda>h ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>) xa) ta2 (x2'', m2'); wbisim1 t (x1'', m1') (x2'', m2'); Red1_execd.ta_bisim_bisim_syntax ta1 ta2; Suspend w \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>; Suspend w \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> bisim_wait1JVM (compP2 P) x1'' x2''
 2. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 4. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
call1 (fst (fst x1'')) \<noteq> None
x2'' = (xcp, (stk, loc, C, M, pc) # frs')
instrs_of (compP2 P) C M ! pc = Invoke M' n
[PROOF STEP]
show "bisim_wait1JVM (compP2 P) x1'' x2''"
[PROOF STATE]
proof (prove)
using this:
call1 (fst (fst x1'')) \<noteq> None
x2'' = (xcp, (stk, loc, C, M, pc) # frs')
instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (1 subgoal):
 1. bisim_wait1JVM (compP2 P) x1'' x2''
[PROOF STEP]
by(simp add: bisim_wait1JVM_def split_beta)
[PROOF STATE]
proof (state)
this:
bisim_wait1JVM (compP2 P) x1'' x2''

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t x1 m1 x2 m2 ta1 x1' m1'
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume "wbisim1 t (x1, m1) (x2, m2)"
      and "bisim_wait1JVM (compP2 P) x1 x2"
      and "mred1 P t (x1, m1) ta1 (x1', m1')"
      and wakeup: "Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>"
[PROOF STATE]
proof (state)
this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain e1 xs1 exs1 where [simp]: "x1 = ((e1, xs1), exs1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>e1 xs1 exs1. x1 = ((e1, xs1), exs1) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x1) auto
[PROOF STATE]
proof (state)
this:
x1 = ((e1, xs1), exs1)

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x1 = ((e1, xs1), exs1)

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain xcp frs where [simp]: "x2 = (xcp, frs)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp frs. x2 = (xcp, frs) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x2)
[PROOF STATE]
proof (state)
this:
x2 = (xcp, frs)

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x2 = (xcp, frs)

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain e1' xs1' exs1' where [simp]: "x1' = ((e1', xs1'), exs1')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>e1' xs1' exs1'. x1' = ((e1', xs1'), exs1') \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x1') auto
[PROOF STATE]
proof (state)
this:
x1' = ((e1', xs1'), exs1')

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
x1 = ((e1, xs1), exs1)
x2 = (xcp, frs)
x1' = ((e1', xs1'), exs1')
[PROOF STEP]
have [simp]: "m1 = m2"
      and bisim: "bisim1_list1 t m2 (e1, xs1) exs1 xcp frs"
      and red: "True,P,t \<turnstile>1 \<langle>(e1, xs1)/exs1, m2\<rangle> -ta1\<rightarrow> \<langle>(e1', xs1')/exs1', m1'\<rangle>"
      and call: "call1 e1 \<noteq> None"
                "case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
x1 = ((e1, xs1), exs1)
x2 = (xcp, frs)
x1' = ((e1', xs1'), exs1')

goal (1 subgoal):
 1. (m1 = m2 &&& bisim1_list1 t m2 (e1, xs1) exs1 xcp frs) &&& True,P,t \<turnstile>1 \<langle>(e1, xs1)/exs1,m2\<rangle> -ta1\<rightarrow> \<langle>(e1', xs1')/exs1',m1'\<rangle> &&& call1 e1 \<noteq> None &&& case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n
[PROOF STEP]
by(auto simp add: bisim_wait1JVM_def split_def)
[PROOF STATE]
proof (state)
this:
m1 = m2
bisim1_list1 t m2 (e1, xs1) exs1 xcp frs
True,P,t \<turnstile>1 \<langle>(e1, xs1)/exs1,m2\<rangle> -ta1\<rightarrow> \<langle>(e1', xs1')/exs1',m1'\<rangle>
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from red wakeup
[PROOF STATE]
proof (chain)
picking this:
True,P,t \<turnstile>1 \<langle>(e1, xs1)/exs1,m2\<rangle> -ta1\<rightarrow> \<langle>(e1', xs1')/exs1',m1'\<rangle>
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>
[PROOF STEP]
have "\<not> \<tau>Move1 P m2 ((e1, xs1), exs1)"
[PROOF STATE]
proof (prove)
using this:
True,P,t \<turnstile>1 \<langle>(e1, xs1)/exs1,m2\<rangle> -ta1\<rightarrow> \<langle>(e1', xs1')/exs1',m1'\<rangle>
Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>

goal (1 subgoal):
 1. \<not> \<tau>Move1 P m2 ((e1, xs1), exs1)
[PROOF STEP]
by(auto elim!: Red1.cases dest: red1_\<tau>_taD simp add: split_beta ta_upd_simps)
[PROOF STATE]
proof (state)
this:
\<not> \<tau>Move1 P m2 ((e1, xs1), exs1)

goal (3 subgoals):
 1. \<And>t x1 m1 x2 m2 ta1 x1' m1'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1'; Notified \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta1\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 3. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from exec_1_simulates_Red1_not_\<tau>[OF wf red bisim this] call
[PROOF STATE]
proof (chain)
picking this:
\<exists>xcp' frs'. \<tau>Exec_1_dr (compP2 P) t (xcp, m2, frs) (xcp', m2, frs') \<and> (\<exists>ta' xcp'' frs''. compP2 P,t \<turnstile> Normal (xcp', m2, frs') -ta'-jvmd\<rightarrow> Normal (xcp'', m1', frs'') \<and> \<not> \<tau>Move2 (compP2 P) (xcp', m2, frs') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta' \<and> bisim1_list1 t m1' (e1', xs1') exs1' xcp'' frs'') \<and> (call1 e1 = None \<or> (case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # FRS \<Rightarrow> \<forall>M' n. instrs_of (compP2 P) C M ! pc \<noteq> Invoke M' n) \<or> xcp' = xcp \<and> frs' = frs)
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n
[PROOF STEP]
show "\<exists>ta2 x2' m2'. mexecd (compP2 P) t (x2, m2) ta2 (x2', m2') \<and> wbisim1 t (x1', m1') (x2', m2') \<and> ta_bisim wbisim1 ta1 ta2"
[PROOF STATE]
proof (prove)
using this:
\<exists>xcp' frs'. \<tau>Exec_1_dr (compP2 P) t (xcp, m2, frs) (xcp', m2, frs') \<and> (\<exists>ta' xcp'' frs''. compP2 P,t \<turnstile> Normal (xcp', m2, frs') -ta'-jvmd\<rightarrow> Normal (xcp'', m1', frs'') \<and> \<not> \<tau>Move2 (compP2 P) (xcp', m2, frs') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta' \<and> bisim1_list1 t m1' (e1', xs1') exs1' xcp'' frs'') \<and> (call1 e1 = None \<or> (case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # FRS \<Rightarrow> \<forall>M' n. instrs_of (compP2 P) C M ! pc \<noteq> Invoke M' n) \<or> xcp' = xcp \<and> frs' = frs)
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (1 subgoal):
 1. \<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
[PROOF STEP]
by(auto simp del: not_None_eq simp add: split_paired_Ex ta_bisim_def ta_upd_simps split: list.split_asm)
[PROOF STATE]
proof (state)
this:
\<exists>ta2 x2' m2'. execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
fix t x1 m1 x2 m2 ta2 x2' m2'
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
assume "wbisim1 t (x1, m1) (x2, m2)"
      and "bisim_wait1JVM (compP2 P) x1 x2"
      and "mexecd (compP2 P) t (x2, m2) ta2 (x2', m2')"
      and wakeup: "Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>"
[PROOF STATE]
proof (state)
this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain e1 xs1 exs1 where [simp]: "x1 = ((e1, xs1), exs1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>e1 xs1 exs1. x1 = ((e1, xs1), exs1) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x1) auto
[PROOF STATE]
proof (state)
this:
x1 = ((e1, xs1), exs1)

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x1 = ((e1, xs1), exs1)

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain xcp frs where [simp]: "x2 = (xcp, frs)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp frs. x2 = (xcp, frs) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x2)
[PROOF STATE]
proof (state)
this:
x2 = (xcp, frs)

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x2 = (xcp, frs)

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
obtain xcp' frs' where [simp]: "x2' = (xcp', frs')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp' frs'. x2' = (xcp', frs') \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(cases x2')
[PROOF STATE]
proof (state)
this:
x2' = (xcp', frs')

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>
x1 = ((e1, xs1), exs1)
x2 = (xcp, frs)
x2' = (xcp', frs')
[PROOF STEP]
have [simp]: "m1 = m2"
      and bisim: "bisim1_list1 t m2 (e1, xs1) exs1 xcp frs"
      and exec: "compP2 P,t \<turnstile> Normal (xcp, m2, frs) -ta2-jvmd\<rightarrow> Normal (xcp', m2', frs')"
      and call: "call1 e1 \<noteq> None"
                "case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n"
[PROOF STATE]
proof (prove)
using this:
wbisim1 t (x1, m1) (x2, m2)
bisim_wait1JVM (compP2 P) x1 x2
execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>
x1 = ((e1, xs1), exs1)
x2 = (xcp, frs)
x2' = (xcp', frs')

goal (1 subgoal):
 1. (m1 = m2 &&& bisim1_list1 t m2 (e1, xs1) exs1 xcp frs) &&& compP2 P,t \<turnstile> Normal (xcp, m2, frs) -ta2-jvmd\<rightarrow> Normal (xcp', m2', frs') &&& call1 e1 \<noteq> None &&& case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n
[PROOF STEP]
by(auto simp add: bisim_wait1JVM_def split_def)
[PROOF STATE]
proof (state)
this:
m1 = m2
bisim1_list1 t m2 (e1, xs1) exs1 xcp frs
compP2 P,t \<turnstile> Normal (xcp, m2, frs) -ta2-jvmd\<rightarrow> Normal (xcp', m2', frs')
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from exec wakeup
[PROOF STATE]
proof (chain)
picking this:
compP2 P,t \<turnstile> Normal (xcp, m2, frs) -ta2-jvmd\<rightarrow> Normal (xcp', m2', frs')
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>
[PROOF STEP]
have "\<not> \<tau>Move2 (compP2 P) (xcp, m2, frs)"
[PROOF STATE]
proof (prove)
using this:
compP2 P,t \<turnstile> Normal (xcp, m2, frs) -ta2-jvmd\<rightarrow> Normal (xcp', m2', frs')
Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>

goal (1 subgoal):
 1. \<not> \<tau>Move2 (compP2 P) (xcp, m2, frs)
[PROOF STEP]
by(auto dest: \<tau>exec_1_taD simp add: split_beta ta_upd_simps)
[PROOF STATE]
proof (state)
this:
\<not> \<tau>Move2 (compP2 P) (xcp, m2, frs)

goal (2 subgoals):
 1. \<And>t x1 m1 x2 m2 ta2 x2' m2'. \<lbrakk>wbisim1 t (x1, m1) (x2, m2); bisim_wait1JVM (compP2 P) x1 x2; execd_mthr.r_syntax (compP2 P) t x2 m2 ta2 x2' m2'; Notified \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub> \<or> WokenUp \<in> set \<lbrace>ta2\<rbrace>\<^bsub>w\<^esub>\<rbrakk> \<Longrightarrow> \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
 2. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
from \<tau>Red1_simulates_exec_1_not_\<tau>[OF wf exec bisim this] call
[PROOF STATE]
proof (chain)
picking this:
\<exists>e' xs' exs' ta' e'' xs'' exs''. \<tau>Red1r P t m2 ((e1, xs1), exs1) ((e', xs'), exs') \<and> True,P,t \<turnstile>1 \<langle>(e', xs')/exs',m2\<rangle> -ta'\<rightarrow> \<langle>(e'', xs'')/exs'',m2'\<rangle> \<and> \<not> \<tau>Move1 P m2 ((e', xs'), exs') \<and> Red1_execd.ta_bisim_bisim_syntax ta' ta2 \<and> bisim1_list1 t m2' (e'', xs'') exs'' xcp' frs' \<and> (call1 e1 = None \<or> (case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # FRS \<Rightarrow> \<forall>M' n. instrs_of (compP2 P) C M ! pc \<noteq> Invoke M' n) \<or> e' = e1 \<and> xs' = xs1 \<and> exs' = exs1)
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n
[PROOF STEP]
show "\<exists>ta1 x1' m1'. mred1 P t (x1, m1) ta1 (x1', m1') \<and> wbisim1 t (x1', m1') (x2', m2') \<and> ta_bisim wbisim1 ta1 ta2"
[PROOF STATE]
proof (prove)
using this:
\<exists>e' xs' exs' ta' e'' xs'' exs''. \<tau>Red1r P t m2 ((e1, xs1), exs1) ((e', xs'), exs') \<and> True,P,t \<turnstile>1 \<langle>(e', xs')/exs',m2\<rangle> -ta'\<rightarrow> \<langle>(e'', xs'')/exs'',m2'\<rangle> \<and> \<not> \<tau>Move1 P m2 ((e', xs'), exs') \<and> Red1_execd.ta_bisim_bisim_syntax ta' ta2 \<and> bisim1_list1 t m2' (e'', xs'') exs'' xcp' frs' \<and> (call1 e1 = None \<or> (case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # FRS \<Rightarrow> \<forall>M' n. instrs_of (compP2 P) C M ! pc \<noteq> Invoke M' n) \<or> e' = e1 \<and> xs' = xs1 \<and> exs' = exs1)
call1 e1 \<noteq> None
case frs of [] \<Rightarrow> False | (stk, loc, C, M, pc) # frs' \<Rightarrow> \<exists>M' n. instrs_of (compP2 P) C M ! pc = Invoke M' n

goal (1 subgoal):
 1. \<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2
[PROOF STEP]
by(auto simp del: not_None_eq simp add: split_paired_Ex ta_bisim_def ta_upd_simps split: list.split_asm)
[PROOF STATE]
proof (state)
this:
\<exists>ta1 x1' m1'. Red1_mthr.r_syntax True P t x1 m1 ta1 x1' m1' \<and> wbisim1 t (x1', m1') (x2', m2') \<and> Red1_execd.ta_bisim_bisim_syntax ta1 ta2

goal (1 subgoal):
 1. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Ex final_expr1 = (\<exists>x2. JVM_final x2)
[PROOF STEP]
show "(\<exists>x. final_expr1 x) \<longleftrightarrow> (\<exists>x. JVM_final x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Ex final_expr1 = (\<exists>x. JVM_final x)
[PROOF STEP]
by(auto simp add: split_paired_Ex final_iff)
[PROOF STATE]
proof (state)
this:
Ex final_expr1 = (\<exists>x. JVM_final x)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
FWdelay_bisimulation_diverge final_expr1 (mred1 P) JVM_final (mexecd (compP2 P)) wbisim1 (bisim_wait1JVM (compP2 P)) (\<lambda>(exexs, h) ta s. \<tau>Move1 P h exexs \<and> ta = \<lbrace>\<rbrace>) (\<lambda>((xcp, frs), h) ta s. \<tau>Move2 (compP2 P) (xcp, h, frs) \<and> ta = \<lbrace>\<rbrace>)

goal:
No subgoals!
[PROOF STEP]
qed