[STATEMENT]
lemma bisim_call_Some_call1:
  "\<lbrakk> bisim Vs e e' xs; call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs \<rbrakk>
  \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and>
               bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'"

  and bisims_calls_Some_calls1:
  "\<lbrakk> bisims Vs es es' xs; calls es = \<lfloor>aMvs\<rfloor>; length Vs + max_varss es' \<le> length xs \<rbrakk>
  \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es', xs) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and>
                bisims Vs es es'' xs' \<and> take (length Vs) xs = take (length Vs) xs'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lbrakk>bisim Vs e e' xs; call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs') &&& (\<lbrakk>bisims Vs es es' xs; calls es = \<lfloor>aMvs\<rfloor>; length Vs + max_varss es' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es', xs) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs es es'' xs' \<and> take (length Vs) xs = take (length Vs) xs')
[PROOF STEP]
proof(induct rule: bisim_bisims.inducts)
[PROOF STATE]
proof (state)
goal (36 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 36 subgoals...
[PROOF STEP]
case bisimCallParams
[PROOF STATE]
proof (state)
this:
bisims Vs_ es_ es'_ xs_
\<lbrakk>calls es_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_varss es'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ es_ es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
call (Val v_\<bullet>M_(es_)) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_vars (Val v_\<bullet>M_(es'_)) \<le> length xs_

goal (36 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 36 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
bisims Vs_ es_ es'_ xs_
\<lbrakk>calls es_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_varss es'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ es_ es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
call (Val v_\<bullet>M_(es_)) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_vars (Val v_\<bullet>M_(es'_)) \<le> length xs_

goal (1 subgoal):
 1. \<exists>e'' xs'. \<tau>red1'r P t h (Val v_\<bullet>M_(es'_), xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ (Val v_\<bullet>M_(es_)) e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
[PROOF STEP]
by(fastforce simp add: is_vals_conv split: if_split_asm)
[PROOF STATE]
proof (state)
this:
\<exists>e'' xs'. \<tau>red1'r P t h (Val v_\<bullet>M_(es'_), xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ (Val v_\<bullet>M_(es_)) e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'

goal (35 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 35 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (35 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 35 subgoals...
[PROOF STEP]
case bisimBlockNone
[PROOF STATE]
proof (state)
this:
bisim (Vs_ @ [V_]) e_ e'_ xs_
\<lbrakk>call e_ = \<lfloor>aMvs\<rfloor>; length (Vs_ @ [V_]) + max_vars e'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e'_, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs_ @ [V_]) e_ e'' xs' \<and> take (length (Vs_ @ [V_])) xs_ = take (length (Vs_ @ [V_])) xs'
call {V_:T_=None; e_} = \<lfloor>aMvs\<rfloor>
length Vs_ + max_vars {length Vs_:T_=None; e'_} \<le> length xs_

goal (35 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 35 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
bisim (Vs_ @ [V_]) e_ e'_ xs_
\<lbrakk>call e_ = \<lfloor>aMvs\<rfloor>; length (Vs_ @ [V_]) + max_vars e'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e'_, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs_ @ [V_]) e_ e'' xs' \<and> take (length (Vs_ @ [V_])) xs_ = take (length (Vs_ @ [V_])) xs'
call {V_:T_=None; e_} = \<lfloor>aMvs\<rfloor>
length Vs_ + max_vars {length Vs_:T_=None; e'_} \<le> length xs_

goal (1 subgoal):
 1. \<exists>e'' xs'. \<tau>red1'r P t h ({length Vs_:T_=None; e'_}, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ {V_:T_=None; e_} e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
[PROOF STEP]
by(fastforce intro: take_eq_take_le_eq)
[PROOF STATE]
proof (state)
this:
\<exists>e'' xs'. \<tau>red1'r P t h ({length Vs_:T_=None; e'_}, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ {V_:T_=None; e_} e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
case (bisimBlockSome Vs V e e' xs v T)
[PROOF STATE]
proof (state)
this:
bisim (Vs @ [V]) e e' (xs[length Vs := v])
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
from \<open>length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs
[PROOF STEP]
have "\<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e'}, xs[length Vs := v])"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs

goal (1 subgoal):
 1. \<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e'}, xs[length Vs := v])
[PROOF STEP]
by(auto intro!: \<tau>red1r_1step Block1Some)
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e'}, xs[length Vs := v])

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e'}, xs[length Vs := v])

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
from bisimBlockSome
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V]) e e' (xs[length Vs := v])
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs
[PROOF STEP]
obtain e'' xs'
    where "\<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs')"
    and "call1 e'' = \<lfloor>aMvs\<rfloor>" "bisim (Vs @ [V]) e e'' xs'"
    and "take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [V]) e e' (xs[length Vs := v])
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs

goal (1 subgoal):
 1. (\<And>e'' xs'. \<lbrakk>\<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs'); call1 e'' = \<lfloor>aMvs\<rfloor>; bisim (Vs @ [V]) e e'' xs'; take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [V]) e e'' xs'
take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
hence "\<tau>red1'r P t h ({length Vs:T=None; e'}, xs[length Vs := v]) ({length Vs:T=None; e''}, xs')"
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h (e', xs[length Vs := v]) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [V]) e e'' xs'
take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'

goal (1 subgoal):
 1. \<tau>red1'r P t h ({length Vs:T=None; e'}, xs[length Vs := v]) ({length Vs:T=None; e''}, xs')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs[length Vs := v]) ({length Vs:T=None; e''}, xs')

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs[length Vs := v]) ({length Vs:T=None; e''}, xs')

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
from \<open>call1 e'' = \<lfloor>aMvs\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
call1 e'' = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
have "call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
call1 e'' = \<lfloor>aMvs\<rfloor>

goal (1 subgoal):
 1. call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
from \<open>take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'\<close>
[PROOF STATE]
proof (chain)
picking this:
take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'
[PROOF STEP]
have "take (length Vs) xs = take (length Vs) xs'"
[PROOF STATE]
proof (prove)
using this:
take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'

goal (1 subgoal):
 1. take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by(auto dest: take_eq_take_le_eq[where m="length Vs"] simp add: take_update_cancel)
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
have "xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
note \<open>take (length (Vs @ [V])) (xs[length Vs := v]) = take (length (Vs @ [V])) xs'\<close>[symmetric]
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) xs' = take (length (Vs @ [V])) (xs[length Vs := v])

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) xs' = take (length (Vs @ [V])) (xs[length Vs := v])

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
have "take (length (Vs @ [V])) (xs[length Vs := v]) ! length Vs = v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. take (length (Vs @ [V])) (xs[length Vs := v]) ! length Vs = v
[PROOF STEP]
using \<open>length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs\<close>
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {length Vs:T=\<lfloor>v\<rfloor>; e'} \<le> length xs

goal (1 subgoal):
 1. take (length (Vs @ [V])) (xs[length Vs := v]) ! length Vs = v
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) (xs[length Vs := v]) ! length Vs = v

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
xs' ! length Vs = v
[PROOF STEP]
have "bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'"
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = v

goal (1 subgoal):
 1. bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
using \<open>bisim (Vs @ [V]) e e'' xs'\<close>
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = v
bisim (Vs @ [V]) e e'' xs'

goal (1 subgoal):
 1. bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (34 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 34 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e''}, xs')
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) ({length Vs:T=None; e''}, xs')
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (1 subgoal):
 1. \<exists>e'' xs'. \<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs {V:T=\<lfloor>v\<rfloor>; e} e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>e'' xs'. \<tau>red1'r P t h ({length Vs:T=\<lfloor>v\<rfloor>; e'}, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs {V:T=\<lfloor>v\<rfloor>; e} e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
case (bisimBlockSomeNone Vs V e e' xs v T)
[PROOF STATE]
proof (state)
this:
bisim (Vs @ [V]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'
xs ! length Vs = v
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=None; e'} \<le> length xs

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'
xs ! length Vs = v
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=None; e'} \<le> length xs
[PROOF STEP]
obtain e'' xs' where "\<tau>red1'r P t h (e', xs) (e'', xs')" "call1 e'' = \<lfloor>aMvs\<rfloor>" "bisim (Vs @ [V]) e e'' xs'"
    and "take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [V]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [V]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [V]) e e'' xs' \<and> take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'
xs ! length Vs = v
call {V:T=\<lfloor>v\<rfloor>; e} = \<lfloor>aMvs\<rfloor>
length Vs + max_vars {length Vs:T=None; e'} \<le> length xs

goal (1 subgoal):
 1. (\<And>e'' xs'. \<lbrakk>\<tau>red1'r P t h (e', xs) (e'', xs'); call1 e'' = \<lfloor>aMvs\<rfloor>; bisim (Vs @ [V]) e e'' xs'; take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h (e', xs) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [V]) e e'' xs'
take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
hence "\<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')"
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h (e', xs) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [V]) e e'' xs'
take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'

goal (1 subgoal):
 1. \<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
from \<open>call1 e'' = \<lfloor>aMvs\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
call1 e'' = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
have "call1 ({length Vs:T=None; e''}) = \<lfloor>aMvs\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
call1 e'' = \<lfloor>aMvs\<rfloor>

goal (1 subgoal):
 1. call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
from \<open>take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'\<close>
[PROOF STATE]
proof (chain)
picking this:
take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'
[PROOF STEP]
have "take (length Vs) xs = take (length Vs) xs'"
[PROOF STATE]
proof (prove)
using this:
take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'

goal (1 subgoal):
 1. take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by(auto intro: take_eq_take_le_eq)
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
have "xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (length (Vs @ [V])) xs' ! length Vs

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
note \<open>take (length (Vs @ [V])) xs = take (length (Vs @ [V])) xs'\<close>[symmetric]
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) xs' = take (length (Vs @ [V])) xs

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) xs' = take (length (Vs @ [V])) xs

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
have "take (length (Vs @ [V])) xs ! length Vs = v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. take (length (Vs @ [V])) xs ! length Vs = v
[PROOF STEP]
using \<open>xs ! length Vs = v\<close>
[PROOF STATE]
proof (prove)
using this:
xs ! length Vs = v

goal (1 subgoal):
 1. take (length (Vs @ [V])) xs ! length Vs = v
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
take (length (Vs @ [V])) xs ! length Vs = v

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
xs' ! length Vs = v
[PROOF STEP]
have "bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'"
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = v

goal (1 subgoal):
 1. bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
using \<open>bisim (Vs @ [V]) e e'' xs'\<close>
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = v
bisim (Vs @ [V]) e e'' xs'

goal (1 subgoal):
 1. bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (33 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 33 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h ({length Vs:T=None; e'}, xs) ({length Vs:T=None; e''}, xs')
call1 {length Vs:T=None; e''} = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs {V:T=\<lfloor>v\<rfloor>; e} {length Vs:T=None; e''} xs'

goal (1 subgoal):
 1. \<exists>e'' xs'. \<tau>red1'r P t h ({length Vs:T=None; e'}, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs {V:T=\<lfloor>v\<rfloor>; e} e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>e'' xs'. \<tau>red1'r P t h ({length Vs:T=None; e'}, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs {V:T=\<lfloor>v\<rfloor>; e} e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
case (bisimInSynchronized Vs e e' xs a)
[PROOF STATE]
proof (state)
this:
bisim (Vs @ [fresh_var Vs]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [fresh_var Vs]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [fresh_var Vs]) e e'' xs' \<and> take (length (Vs @ [fresh_var Vs])) xs = take (length (Vs @ [fresh_var Vs])) xs'
xs ! length Vs = Addr a
call (insync(a) e) = \<lfloor>aMvs\<rfloor>
length Vs + max_vars (insync\<^bsub>length Vs\<^esub> (a) e') \<le> length xs

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [fresh_var Vs]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [fresh_var Vs]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [fresh_var Vs]) e e'' xs' \<and> take (length (Vs @ [fresh_var Vs])) xs = take (length (Vs @ [fresh_var Vs])) xs'
xs ! length Vs = Addr a
call (insync(a) e) = \<lfloor>aMvs\<rfloor>
length Vs + max_vars (insync\<^bsub>length Vs\<^esub> (a) e') \<le> length xs
[PROOF STEP]
obtain e'' xs' where "\<tau>red1'r P t h (e', xs) (e'', xs')" "call1 e'' = \<lfloor>aMvs\<rfloor>" "bisim (Vs @ [fresh_var Vs]) e e'' xs'"
    and "take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [fresh_var Vs]) e e' xs
\<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length (Vs @ [fresh_var Vs]) + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim (Vs @ [fresh_var Vs]) e e'' xs' \<and> take (length (Vs @ [fresh_var Vs])) xs = take (length (Vs @ [fresh_var Vs])) xs'
xs ! length Vs = Addr a
call (insync(a) e) = \<lfloor>aMvs\<rfloor>
length Vs + max_vars (insync\<^bsub>length Vs\<^esub> (a) e') \<le> length xs

goal (1 subgoal):
 1. (\<And>e'' xs'. \<lbrakk>\<tau>red1'r P t h (e', xs) (e'', xs'); call1 e'' = \<lfloor>aMvs\<rfloor>; bisim (Vs @ [fresh_var Vs]) e e'' xs'; take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h (e', xs) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [fresh_var Vs]) e e'' xs'
take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
hence "\<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')"
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h (e', xs) (e'', xs')
call1 e'' = \<lfloor>aMvs\<rfloor>
bisim (Vs @ [fresh_var Vs]) e e'' xs'
take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'

goal (1 subgoal):
 1. \<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
from \<open>call1 e'' = \<lfloor>aMvs\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
call1 e'' = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
have "call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
call1 e'' = \<lfloor>aMvs\<rfloor>

goal (1 subgoal):
 1. call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
from \<open>take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'\<close>
[PROOF STATE]
proof (chain)
picking this:
take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'
[PROOF STEP]
have "take (length Vs) xs = take (length Vs) xs'"
[PROOF STATE]
proof (prove)
using this:
take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'

goal (1 subgoal):
 1. take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by(auto intro: take_eq_take_le_eq)
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
take (length Vs) xs = take (length Vs) xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
have "xs' ! length Vs = take (Suc (length Vs)) xs' ! length Vs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. xs' ! length Vs = take (Suc (length Vs)) xs' ! length Vs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (Suc (length Vs)) xs' ! length Vs

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
xs' ! length Vs = take (Suc (length Vs)) xs' ! length Vs

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
note \<open>take (Suc (length Vs)) xs = take (Suc (length Vs)) xs'\<close>[symmetric]
[PROOF STATE]
proof (state)
this:
take (Suc (length Vs)) xs' = take (Suc (length Vs)) xs

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
take (Suc (length Vs)) xs' = take (Suc (length Vs)) xs

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
have "take (Suc (length Vs)) xs ! length Vs = Addr a"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. take (Suc (length Vs)) xs ! length Vs = Addr a
[PROOF STEP]
using \<open>xs ! length Vs = Addr a\<close>
[PROOF STATE]
proof (prove)
using this:
xs ! length Vs = Addr a

goal (1 subgoal):
 1. take (Suc (length Vs)) xs ! length Vs = Addr a
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
take (Suc (length Vs)) xs ! length Vs = Addr a

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
xs' ! length Vs = Addr a
[PROOF STEP]
have "bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'"
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = Addr a

goal (1 subgoal):
 1. bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'
[PROOF STEP]
using \<open>bisim (Vs @ [fresh_var Vs]) e e'' xs'\<close>
[PROOF STATE]
proof (prove)
using this:
xs' ! length Vs = Addr a
bisim (Vs @ [fresh_var Vs]) e e'' xs'

goal (1 subgoal):
 1. bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'

goal (32 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 32 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')
call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (insync\<^bsub>length Vs\<^esub> (a) e'', xs')
call1 (insync\<^bsub>length Vs\<^esub> (a) e'') = \<lfloor>aMvs\<rfloor>
take (length Vs) xs = take (length Vs) xs'
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) e'') xs'

goal (1 subgoal):
 1. \<exists>e'' xs'. \<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (insync(a) e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>e'' xs'. \<tau>red1'r P t h (insync\<^bsub>length Vs\<^esub> (a) e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (insync(a) e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'

goal (31 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 31 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (31 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 31 subgoals...
[PROOF STEP]
case bisimsCons1
[PROOF STATE]
proof (state)
this:
bisim Vs_ e_ e'_ xs_
\<lbrakk>call e_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_vars e'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e'_, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ e_ e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
\<not> is_val e_
\<not> contains_insyncs es_
calls (e_ # es_) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_varss (e'_ # compEs1 Vs_ es_) \<le> length xs_

goal (31 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 31 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
bisim Vs_ e_ e'_ xs_
\<lbrakk>call e_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_vars e'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e'_, xs_) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs_ e_ e'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
\<not> is_val e_
\<not> contains_insyncs es_
calls (e_ # es_) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_varss (e'_ # compEs1 Vs_ es_) \<le> length xs_

goal (1 subgoal):
 1. \<exists>es'' xs'. \<tau>reds1'r P t h (e'_ # compEs1 Vs_ es_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ (e_ # es_) es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
[PROOF STEP]
by(fastforce intro!: \<tau>red1r_inj_\<tau>reds1r)
[PROOF STATE]
proof (state)
this:
\<exists>es'' xs'. \<tau>reds1'r P t h (e'_ # compEs1 Vs_ es_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ (e_ # es_) es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'

goal (30 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 30 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (30 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 30 subgoals...
[PROOF STEP]
case bisimsCons2
[PROOF STATE]
proof (state)
this:
bisims Vs_ es_ es'_ xs_
\<lbrakk>calls es_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_varss es'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ es_ es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
calls (Val v_ # es_) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_varss (Val v_ # es'_) \<le> length xs_

goal (30 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 30 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
bisims Vs_ es_ es'_ xs_
\<lbrakk>calls es_ = \<lfloor>aMvs\<rfloor>; length Vs_ + max_varss es'_ \<le> length xs_\<rbrakk> \<Longrightarrow> \<exists>es'' xs'. \<tau>reds1'r P t h (es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ es_ es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
calls (Val v_ # es_) = \<lfloor>aMvs\<rfloor>
length Vs_ + max_varss (Val v_ # es'_) \<le> length xs_

goal (1 subgoal):
 1. \<exists>es'' xs'. \<tau>reds1'r P t h (Val v_ # es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ (Val v_ # es_) es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'
[PROOF STEP]
by(fastforce intro!: \<tau>reds1r_cons_\<tau>reds1r)
[PROOF STATE]
proof (state)
this:
\<exists>es'' xs'. \<tau>reds1'r P t h (Val v_ # es'_, xs_) (es'', xs') \<and> calls1 es'' = \<lfloor>aMvs\<rfloor> \<and> bisims Vs_ (Val v_ # es_) es'' xs' \<and> take (length Vs_) xs_ = take (length Vs_) xs'

goal (29 subgoals):
 1. \<And>Vs C xs. \<lbrakk>call (new C) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (new C) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (new C, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (new C) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 2. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (newA T\<lfloor>e'\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (newA T\<lfloor>e'\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (newA T\<lfloor>e\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 3. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Cast T e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Cast T e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Cast T e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Cast T e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 4. \<And>Vs e e' xs T. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (e instanceof T) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' instanceof T) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e' instanceof T, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e instanceof T) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 5. \<And>Vs v xs. \<lbrakk>call (Val v) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 6. \<And>Vs e e' xs e'' bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val e; \<not> contains_insync e''; call (e \<guillemotleft>bop\<guillemotright> e'') = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e''a xs'. \<tau>red1'r P t h (e' \<guillemotleft>bop\<guillemotright> compE1 Vs e'', xs) (e''a, xs') \<and> call1 e''a = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (e \<guillemotleft>bop\<guillemotright> e'') e''a xs' \<and> take (length Vs) xs = take (length Vs) xs'
 7. \<And>Vs e e' xs v bop. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (Val v \<guillemotleft>bop\<guillemotright> e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Val v \<guillemotleft>bop\<guillemotright> e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 8. \<And>Vs V xs. \<lbrakk>call (Var V) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (Var (index Vs V)) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (Var (index Vs V), xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (Var V) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 9. \<And>Vs e e' xs V. \<lbrakk>bisim Vs e e' xs; \<lbrakk>call e = \<lfloor>aMvs\<rfloor>; length Vs + max_vars e' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs e e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; call (V:=e) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (index Vs V:=e') \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (index Vs V:=e', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (V:=e) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
 10. \<And>Vs a a' xs i. \<lbrakk>bisim Vs a a' xs; \<lbrakk>call a = \<lfloor>aMvs\<rfloor>; length Vs + max_vars a' \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a', xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs a e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'; \<not> is_val a; \<not> contains_insync i; call (a\<lfloor>i\<rceil>) = \<lfloor>aMvs\<rfloor>; length Vs + max_vars (a'\<lfloor>compE1 Vs i\<rceil>) \<le> length xs\<rbrakk> \<Longrightarrow> \<exists>e'' xs'. \<tau>red1'r P t h (a'\<lfloor>compE1 Vs i\<rceil>, xs) (e'', xs') \<and> call1 e'' = \<lfloor>aMvs\<rfloor> \<and> bisim Vs (a\<lfloor>i\<rceil>) e'' xs' \<and> take (length Vs) xs = take (length Vs) xs'
A total of 29 subgoals...
[PROOF STEP]
qed fastforce+