[STATEMENT]
lemma assumes wf: "wf_J_prog P"
  shows red_simulates_red1_aux:
  "\<lbrakk> False,compP1 P,t \<turnstile>1 \<langle>e1, S\<rangle> -TA\<rightarrow> \<langle>e1', S'\<rangle>; bisim vs e2 e1 (lcl S); fv e2 \<subseteq> set vs;
     x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S]; length vs + max_vars e1 \<le> length (lcl S);
     \<D> e2 \<lfloor>dom x\<rfloor> \<rbrakk>
  \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t TA e1 e1' e2 (hp S) x ta e2' (hp S') x' \<and> bisim vs e2' e1' (lcl S') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S']"
  (is "\<lbrakk> _; _; _; _; _; _ \<rbrakk> \<Longrightarrow> ?concl e1 e1' e2 S x TA S' e1' vs")

  and reds_simulates_reds1_aux:
  "\<lbrakk> False,compP1 P,t \<turnstile>1 \<langle>es1, S\<rangle> [-TA\<rightarrow>] \<langle>es1', S'\<rangle>; bisims vs es2 es1 (lcl S); fvs es2 \<subseteq> set vs;
     x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S]; length vs + max_varss es1 \<le> length (lcl S);
     \<D>s es2 \<lfloor>dom x\<rfloor> \<rbrakk>
  \<Longrightarrow> \<exists>ta es2' x'. sim_moves10 P t TA es1 es1' es2 (hp S) x ta es2' (hp S') x' \<and> bisims vs es2' es1' (lcl S') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S']"
  (is "\<lbrakk> _; _; _; _; _; _ \<rbrakk> \<Longrightarrow> ?concls es1 es1' es2 S x TA S' es1' vs")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e1,S\<rangle> -TA\<rightarrow> \<langle>e1',S'\<rangle>; bisim vs e2 e1 (lcl S); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S]; length vs + max_vars e1 \<le> length (lcl S); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t TA e1 e1' e2 (hp S) x ta e2' (hp S') x' \<and> bisim vs e2' e1' (lcl S') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S']) &&& (\<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>es1,S\<rangle> [-TA\<rightarrow>] \<langle>es1',S'\<rangle>; bisims vs es2 es1 (lcl S); fvs es2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S]; length vs + max_varss es1 \<le> length (lcl S); \<D>s es2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta es2' x'. sim_moves10 P t TA es1 es1' es2 (hp S) x ta es2' (hp S') x' \<and> bisims vs es2' es1' (lcl S') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl S'])
[PROOF STEP]
proof(induct arbitrary: vs e2 x and vs es2 x rule: red1_reds1.inducts)
[PROOF STATE]
proof (state)
goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
case (Bin1OpRed1 e s ta e' s' bop e2 Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (e \<guillemotleft>bop\<guillemotright> e2) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e \<guillemotleft>bop\<guillemotright> e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
             \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
[PROOF STEP]
have "\<not> is_val e"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val e

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 (e \<guillemotleft>bop\<guillemotright> e2) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (e \<guillemotleft>bop\<guillemotright> e2) (lcl s)
\<not> is_val e
[PROOF STEP]
obtain E E2'
    where E2: "E2 = E \<guillemotleft>bop\<guillemotright> E2'" "e2 = compE1 Vs E2'" and "bisim Vs E e (lcl s)"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (e \<guillemotleft>bop\<guillemotright> e2) (lcl s)
\<not> is_val e

goal (1 subgoal):
 1. (\<And>E E2'. \<lbrakk>E2 = E \<guillemotleft>bop\<guillemotright> E2'; e2 = compE1 Vs E2'; bisim Vs E e (lcl s); \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto elim!: bisim_cases)
[PROOF STATE]
proof (state)
this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (e \<guillemotleft>bop\<guillemotright> e2) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e \<guillemotleft>bop\<guillemotright> e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e \<guillemotleft>bop\<guillemotright> e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e \<guillemotleft>bop\<guillemotright> e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (102 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 102 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = E \<guillemotleft>bop\<guillemotright> E2'
e2 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e \<guillemotleft>bop\<guillemotright> e2) (e' \<guillemotleft>bop\<guillemotright> e2) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e' \<guillemotleft>bop\<guillemotright> e2) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(auto intro: BinOpRed1)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e \<guillemotleft>bop\<guillemotright> e2) (e' \<guillemotleft>bop\<guillemotright> e2) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e' \<guillemotleft>bop\<guillemotright> e2) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
case (Bin1OpRed2 e s ta e' s' v bop Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val v \<guillemotleft>bop\<guillemotright> e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
              \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Val v \<guillemotleft>bop\<guillemotright> e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val v \<guillemotleft>bop\<guillemotright> e) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = Val v \<guillemotleft>bop\<guillemotright> E" and "bisim Vs E e (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val v \<guillemotleft>bop\<guillemotright> e) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val v \<guillemotleft>bop\<guillemotright> E; bisim Vs E e (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = Val v \<guillemotleft>bop\<guillemotright> E
bisim Vs E e (lcl s)

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val v \<guillemotleft>bop\<guillemotright> E
bisim Vs E e (lcl s)

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close> E2
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v \<guillemotleft>bop\<guillemotright> E

goal (101 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 101 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val v \<guillemotleft>bop\<guillemotright> E
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v \<guillemotleft>bop\<guillemotright> E
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val v \<guillemotleft>bop\<guillemotright> E
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v \<guillemotleft>bop\<guillemotright> e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v \<guillemotleft>bop\<guillemotright> E

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val v \<guillemotleft>bop\<guillemotright> e) (Val v \<guillemotleft>bop\<guillemotright> e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v \<guillemotleft>bop\<guillemotright> e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(auto intro: BinOpRed2)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val v \<guillemotleft>bop\<guillemotright> e) (Val v \<guillemotleft>bop\<guillemotright> e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v \<guillemotleft>bop\<guillemotright> e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
case (Red1Var s V v Vs E2 X)
[PROOF STATE]
proof (state)
this:
lcl s ! V = v
V < length (lcl s)
bisim Vs E2 (Var V) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Var V) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Var V) (lcl s)\<close> \<open>fv E2 \<subseteq> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Var V) (lcl s)
fv E2 \<subseteq> set Vs
[PROOF STEP]
obtain V' where "E2 = Var V'" "V' = Vs ! V" "V = index Vs V'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Var V) (lcl s)
fv E2 \<subseteq> set Vs

goal (1 subgoal):
 1. (\<And>V'. \<lbrakk>E2 = Var V'; V' = Vs ! V; V = index Vs V'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(clarify, simp)
[PROOF STATE]
proof (state)
this:
E2 = Var V'
V' = Vs ! V
V = index Vs V'

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
from \<open>E2 = Var V'\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
E2 = Var V'
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain v' where "X V' = \<lfloor>v'\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
E2 = Var V'
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>v'. X V' = \<lfloor>v'\<rfloor> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto simp add: hyperset_defs)
[PROOF STATE]
proof (state)
this:
X V' = \<lfloor>v'\<rfloor>

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
with \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
X V' = \<lfloor>v'\<rfloor>
[PROOF STEP]
have "[Vs [\<mapsto>] lcl s] V' = \<lfloor>v'\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
X V' = \<lfloor>v'\<rfloor>

goal (1 subgoal):
 1. [Vs [\<mapsto>] lcl s] V' = \<lfloor>v'\<rfloor>
[PROOF STEP]
by(rule map_le_SomeD)
[PROOF STATE]
proof (state)
this:
[Vs [\<mapsto>] lcl s] V' = \<lfloor>v'\<rfloor>

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
with \<open>length Vs + max_vars (Var V) \<le> length (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars (Var V) \<le> length (lcl s)
[Vs [\<mapsto>] lcl s] V' = \<lfloor>v'\<rfloor>
[PROOF STEP]
have "lcl s ! (index Vs V') = v'"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars (Var V) \<le> length (lcl s)
[Vs [\<mapsto>] lcl s] V' = \<lfloor>v'\<rfloor>

goal (1 subgoal):
 1. lcl s ! index Vs V' = v'
[PROOF STEP]
by(auto intro: map_upds_Some_eq_nth_index)
[PROOF STATE]
proof (state)
this:
lcl s ! index Vs V' = v'

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
with \<open>V = index Vs V'\<close> \<open>lcl s ! V = v\<close>
[PROOF STATE]
proof (chain)
picking this:
V = index Vs V'
lcl s ! V = v
lcl s ! index Vs V' = v'
[PROOF STEP]
have "v = v'"
[PROOF STATE]
proof (prove)
using this:
V = index Vs V'
lcl s ! V = v
lcl s ! index Vs V' = v'

goal (1 subgoal):
 1. v = v'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
v = v'

goal (100 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 100 subgoals...
[PROOF STEP]
with \<open>X V' = \<lfloor>v'\<rfloor>\<close> \<open>E2 = Var V'\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (chain)
picking this:
X V' = \<lfloor>v'\<rfloor>
E2 = Var V'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
v = v'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
X V' = \<lfloor>v'\<rfloor>
E2 = Var V'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
v = v'

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Var V) (Val v) E2 (hp s) X ta e2' (hp s) x' \<and> bisim Vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
[PROOF STEP]
by(fastforce intro: RedVar)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Var V) (Val v) E2 (hp s) X ta e2' (hp s) x' \<and> bisim Vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]

goal (99 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 99 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (99 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 99 subgoals...
[PROOF STEP]
case (LAss1Red e s ta e' s' V Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (V:=e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (V:=e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (99 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 99 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (99 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 99 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (V:=e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (V:=e) (lcl s)
[PROOF STEP]
obtain E V'
    where E2: "E2 = (V':=E)" "V = index Vs V'" and "bisim Vs E e (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (V:=e) (lcl s)

goal (1 subgoal):
 1. (\<And>V' E. \<lbrakk>E2 = V':=E; V = index Vs V'; bisim Vs E e (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = V':=E
V = index Vs V'
bisim Vs E e (lcl s)

goal (99 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 99 subgoals...
[PROOF STEP]
with IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (V:=e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
    E2
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (V:=e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = V':=E
V = index Vs V'
E2 = V':=E
V = index Vs V'
bisim Vs E e (lcl s)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (V:=e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = V':=E
V = index Vs V'
E2 = V':=E
V = index Vs V'
bisim Vs E e (lcl s)

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (V:=e) (V:=e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (V:=e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(auto intro: LAssRed)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (V:=e) (V:=e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (V:=e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
case (Red1LAss V l v h Vs E2 X)
[PROOF STATE]
proof (state)
this:
V < length l
bisim Vs E2 (V:=Val v) (lcl (h, l))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l)]
length Vs + max_vars (V:=Val v) \<le> length (lcl (h, l))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (V:=Val v) (lcl (h, l))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (V:=Val v) (lcl (h, l))
[PROOF STEP]
obtain V' where "E2 = (V' := Val v)" "V = index Vs V'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (V:=Val v) (lcl (h, l))

goal (1 subgoal):
 1. (\<And>V'. \<lbrakk>E2 = V':=Val v; V = index Vs V'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = V':=Val v
V = index Vs V'

goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = V':=Val v
V = index Vs V'

goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
with \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l)]\<close> \<open>length Vs + max_vars (V:=Val v) \<le> length (lcl (h, l))\<close>
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l)]
length Vs + max_vars (V:=Val v) \<le> length (lcl (h, l))
E2 = V':=Val v
V = index Vs V'
[PROOF STEP]
have "X(V' \<mapsto> v) \<subseteq>\<^sub>m [Vs [\<mapsto>] l[index Vs V' := v]]"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l)]
length Vs + max_vars (V:=Val v) \<le> length (lcl (h, l))
E2 = V':=Val v
V = index Vs V'

goal (1 subgoal):
 1. X(V' \<mapsto> v) \<subseteq>\<^sub>m [Vs [\<mapsto>] l[index Vs V' := v]]
[PROOF STEP]
by(auto intro: LAss_lem)
[PROOF STATE]
proof (state)
this:
X(V' \<mapsto> v) \<subseteq>\<^sub>m [Vs [\<mapsto>] l[index Vs V' := v]]

goal (98 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 98 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = V':=Val v
V = index Vs V'
X(V' \<mapsto> v) \<subseteq>\<^sub>m [Vs [\<mapsto>] l[index Vs V' := v]]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = V':=Val v
V = index Vs V'
X(V' \<mapsto> v) \<subseteq>\<^sub>m [Vs [\<mapsto>] l[index Vs V' := v]]

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (V:=Val v) unit E2 (hp (h, l)) X ta e2' (hp (h, l[V := v])) x' \<and> bisim Vs e2' unit (lcl (h, l[V := v])) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l[V := v])]
[PROOF STEP]
by(auto intro: RedLAss simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (V:=Val v) unit E2 (hp (h, l)) X ta e2' (hp (h, l[V := v])) x' \<and> bisim Vs e2' unit (lcl (h, l[V := v])) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, l[V := v])]

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
case (AAcc1Red1 a s ta a' s' i Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 a (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars a \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (a\<lfloor>i\<rceil>) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 a (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars a \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
             \<Longrightarrow> ?concl a a' e2 s x ta s' a' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 a (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars a \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
[PROOF STEP]
have "\<not> is_val a"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val a
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val a

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 (a\<lfloor>i\<rceil>) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (a\<lfloor>i\<rceil>) (lcl s)
\<not> is_val a
[PROOF STEP]
obtain E E2'
    where E2: "E2 = E\<lfloor>E2'\<rceil>" "i = compE1 Vs E2'" and "bisim Vs E a (lcl s)"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (a\<lfloor>i\<rceil>) (lcl s)
\<not> is_val a

goal (1 subgoal):
 1. (\<And>E E2'. \<lbrakk>E2 = E\<lfloor>E2'\<rceil>; i = compE1 Vs E2'; bisim Vs E a (lcl s); \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
bisim Vs E a (lcl s)
\<not> contains_insync E2'

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
bisim Vs E a (lcl s)
\<not> contains_insync E2'

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (a\<lfloor>i\<rceil>) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where "sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' a' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' a' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (97 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 97 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = E\<lfloor>E2'\<rceil>
i = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil>) (a'\<lfloor>i\<rceil>) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(auto intro: AAccRed1)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil>) (a'\<lfloor>i\<rceil>) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
case (AAcc1Red2 i s ta i' s' a Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>i,s\<rangle> -ta\<rightarrow> \<langle>i',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 i (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars i \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val a\<lfloor>i\<rceil>) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 i (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars i \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl i i' e2 s x ta s' i' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 i (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars i \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Val a\<lfloor>i\<rceil>) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val a\<lfloor>i\<rceil>) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = Val a\<lfloor>E\<rceil>" and "bisim Vs E i (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val a\<lfloor>i\<rceil>) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val a\<lfloor>E\<rceil>; bisim Vs E i (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>E\<rceil>
bisim Vs E i (lcl s)

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>E\<rceil>
bisim Vs E i (lcl s)

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close> E2
    \<open>length Vs + max_vars (Val a\<lfloor>i\<rceil>) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>E\<rceil>
length Vs + max_vars (Val a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (96 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 96 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val a\<lfloor>E\<rceil>
bisim Vs E i (lcl s)
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>E\<rceil>
length Vs + max_vars (Val a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val a\<lfloor>E\<rceil>
bisim Vs E i (lcl s)
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>E\<rceil>
length Vs + max_vars (Val a\<lfloor>i\<rceil>) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>i\<rceil>) (Val a\<lfloor>i'\<rceil>) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>i'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(auto intro: AAccRed2)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>i\<rceil>) (Val a\<lfloor>i'\<rceil>) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>i'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (95 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 95 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (95 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 95 subgoals...
[PROOF STEP]
case Red1AAcc
[PROOF STATE]
proof (state)
this:
typeof_addr h_ a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
heap_read h_ a_ (ACell (nat (sint i_))) v_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil>) (lcl (h_, xs_))
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, xs_)]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<le> length (lcl (h_, xs_))
\<D> e2 \<lfloor>dom x\<rfloor>

goal (95 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 95 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
typeof_addr h_ a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
heap_read h_ a_ (ACell (nat (sint i_))) v_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil>) (lcl (h_, xs_))
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, xs_)]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<le> length (lcl (h_, xs_))
\<D> e2 \<lfloor>dom x\<rfloor>

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>ReadMem a_ (ACell (nat (sint i_))) v_\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil>) (Val v_) e2 (hp (h_, xs_)) x ta e2' (hp (h_, xs_)) x' \<and> bisim vs e2' (Val v_) (lcl (h_, xs_)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, xs_)]
[PROOF STEP]
by(fastforce intro: RedAAcc simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>ReadMem a_ (ACell (nat (sint i_))) v_\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil>) (Val v_) e2 (hp (h_, xs_)) x ta e2' (hp (h_, xs_)) x' \<and> bisim vs e2' (Val v_) (lcl (h_, xs_)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, xs_)]

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
case (AAss1Red1 a s ta a' s' i e Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 a (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars a \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (a\<lfloor>i\<rceil> := e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 a (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars a \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor> \<rbrakk>
             \<Longrightarrow> ?concl a a' e2 s x ta s' a' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 a (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars a \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
[PROOF STEP]
have "\<not> is_val a"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val a
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val a

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 (a\<lfloor>i\<rceil>:=e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (a\<lfloor>i\<rceil> := e) (lcl s)
\<not> is_val a
[PROOF STEP]
obtain E E2' E2''
    where E2: "E2 = E\<lfloor>E2'\<rceil>:=E2''" "i = compE1 Vs E2'" "e = compE1 Vs E2''" and "bisim Vs E a (lcl s)"
    and sync: "\<not> contains_insync E2'" "\<not> contains_insync E2''"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (a\<lfloor>i\<rceil> := e) (lcl s)
\<not> is_val a

goal (1 subgoal):
 1. (\<And>E E2' E2''. \<lbrakk>E2 = E\<lfloor>E2'\<rceil> := E2''; i = compE1 Vs E2'; e = compE1 Vs E2''; bisim Vs E a (lcl s); \<not> contains_insync E2'; \<not> contains_insync E2''\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (a\<lfloor>i\<rceil>:=e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where IH': "sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' a' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
bisim Vs E a (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''
\<lbrakk>bisim Vs E a (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars a \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta a a' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' a' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' a' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (94 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 94 subgoals...
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
proof(cases "is_val e2'")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
is_val e2'

goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
from E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
\<not> contains_insync E2''
[PROOF STEP]
have "bisim Vs E2' i (lcl s')" "bisim Vs E2'' e (lcl s')"
[PROOF STATE]
proof (prove)
using this:
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (1 subgoal):
 1. bisim Vs E2' i (lcl s') &&& bisim Vs E2'' e (lcl s')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bisim Vs E2' i (lcl s')
bisim Vs E2'' e (lcl s')

goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
with IH' E2 True sync
[PROOF STATE]
proof (chain)
picking this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
is_val e2'
\<not> contains_insync E2'
\<not> contains_insync E2''
bisim Vs E2' i (lcl s')
bisim Vs E2'' e (lcl s')
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
is_val e2'
\<not> contains_insync E2'
\<not> contains_insync E2''
bisim Vs E2' i (lcl s')
bisim Vs E2'' e (lcl s')

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val E2'")(fastforce intro: AAssRed1)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> is_val e2'

goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
with IH' E2 sync
[PROOF STATE]
proof (chain)
picking this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
\<not> contains_insync E2'
\<not> contains_insync E2''
\<not> is_val e2'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta a a' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' a' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<lfloor>E2'\<rceil> := E2''
i = compE1 Vs E2'
e = compE1 Vs E2''
\<not> contains_insync E2'
\<not> contains_insync E2''
\<not> is_val e2'

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce intro: AAssRed1)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (a\<lfloor>i\<rceil> := e) (a'\<lfloor>i\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (a'\<lfloor>i\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
case (AAss1Red2 i s ta i' s' a e Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>i,s\<rangle> -ta\<rightarrow> \<langle>i',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 i (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars i \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val a\<lfloor>i\<rceil> := e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 i (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars i \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl i i' e2 s x ta s' i' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 i (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars i \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>i,s\<rangle> -ta\<rightarrow> \<langle>i',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>i,s\<rangle> -ta\<rightarrow> \<langle>i',s'\<rangle>
[PROOF STEP]
have "\<not> is_val i"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>i,s\<rangle> -ta\<rightarrow> \<langle>i',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val i
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val i

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 (Val a\<lfloor>i\<rceil>:=e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val a\<lfloor>i\<rceil> := e) (lcl s)
\<not> is_val i
[PROOF STEP]
obtain E E2'
    where E2: "E2 = Val a\<lfloor>E\<rceil>:=E2'" "e = compE1 Vs E2'" and "bisim Vs E i (lcl s)"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val a\<lfloor>i\<rceil> := e) (lcl s)
\<not> is_val i

goal (1 subgoal):
 1. (\<And>E E2'. \<lbrakk>E2 = Val a\<lfloor>E\<rceil> := E2'; e = compE1 Vs E2'; bisim Vs E i (lcl s); \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
bisim Vs E i (lcl s)
\<not> contains_insync E2'

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
bisim Vs E i (lcl s)
\<not> contains_insync E2'

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (Val a\<lfloor>i\<rceil>:=e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
bisim Vs E i (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where "sim_move10 P t ta i i' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' i' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
bisim Vs E i (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E i (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars i \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta i i' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' i' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta i i' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' i' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta i i' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' i' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (93 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 93 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta i i' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' i' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val a\<lfloor>E\<rceil> := E2'
e = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta i i' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' i' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>i\<rceil> := e) (Val a\<lfloor>i'\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>i'\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(fastforce intro: AAssRed2)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>i\<rceil> := e) (Val a\<lfloor>i'\<rceil> := e) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>i'\<rceil> := e) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
case (AAss1Red3 e s ta e' s' a i Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val a\<lfloor>Val i\<rceil> := e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val a\<lfloor>Val i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Val a\<lfloor>Val i\<rceil>:=e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val a\<lfloor>Val i\<rceil> := e) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = Val a\<lfloor>Val i\<rceil>:=E" and "bisim Vs E e (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val a\<lfloor>Val i\<rceil> := e) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val a\<lfloor>Val i\<rceil> := E; bisim Vs E e (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>Val i\<rceil> := E
bisim Vs E e (lcl s)

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val a\<lfloor>Val i\<rceil> := E
bisim Vs E e (lcl s)

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close> E2
    \<open>length Vs + max_vars (Val a\<lfloor>Val i\<rceil>:=e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>Val i\<rceil> := E
length Vs + max_vars (Val a\<lfloor>Val i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 92 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val a\<lfloor>Val i\<rceil> := E
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>Val i\<rceil> := E
length Vs + max_vars (Val a\<lfloor>Val i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val a\<lfloor>Val i\<rceil> := E
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val a\<lfloor>Val i\<rceil> := E
length Vs + max_vars (Val a\<lfloor>Val i\<rceil> := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>Val i\<rceil> := e) (Val a\<lfloor>Val i\<rceil> := e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>Val i\<rceil> := e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce intro: AAssRed3)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val a\<lfloor>Val i\<rceil> := e) (Val a\<lfloor>Val i\<rceil> := e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val a\<lfloor>Val i\<rceil> := e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (91 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 91 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (91 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 91 subgoals...
[PROOF STEP]
case Red1AAssStore
[PROOF STATE]
proof (state)
this:
typeof_addr (hp s_) a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
typeof\<^bsub>hp s_\<^esub> w_ = \<lfloor>U_\<rfloor>
\<not> compP1 P \<turnstile> U_ \<le> T_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (lcl s_)
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s_]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<le> length (lcl s_)
\<D> e2 \<lfloor>dom x\<rfloor>

goal (91 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 91 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
typeof_addr (hp s_) a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
typeof\<^bsub>hp s_\<^esub> w_ = \<lfloor>U_\<rfloor>
\<not> compP1 P \<turnstile> U_ \<le> T_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (lcl s_)
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s_]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<le> length (lcl s_)
\<D> e2 \<lfloor>dom x\<rfloor>

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (Throw (addr_of_sys_xcpt ArrayStore)) e2 (hp s_) x ta e2' (hp s_) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ArrayStore)) (lcl s_) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s_]
[PROOF STEP]
by(auto)((rule exI conjI)+, auto)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (Throw (addr_of_sys_xcpt ArrayStore)) e2 (hp s_) x ta e2' (hp s_) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ArrayStore)) (lcl s_) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s_]

goal (90 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 90 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (90 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 90 subgoals...
[PROOF STEP]
case Red1AAss
[PROOF STATE]
proof (state)
this:
typeof_addr h_ a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
typeof\<^bsub>h_\<^esub> w_ = \<lfloor>U_\<rfloor>
compP1 P \<turnstile> U_ \<le> T_
heap_write h_ a_ (ACell (nat (sint i_))) w_ h'_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (lcl (h_, l_))
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, l_)]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<le> length (lcl (h_, l_))
\<D> e2 \<lfloor>dom x\<rfloor>

goal (90 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 90 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
typeof_addr h_ a_ = \<lfloor>Array_type T_ n_\<rfloor>
0 \<le>s i_
sint i_ < int n_
typeof\<^bsub>h_\<^esub> w_ = \<lfloor>U_\<rfloor>
compP1 P \<turnstile> U_ \<le> T_
heap_write h_ a_ (ACell (nat (sint i_))) w_ h'_
bisim vs e2 (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) (lcl (h_, l_))
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h_, l_)]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<le> length (lcl (h_, l_))
\<D> e2 \<lfloor>dom x\<rfloor>

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>WriteMem a_ (ACell (nat (sint i_))) w_\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) unit e2 (hp (h_, l_)) x ta e2' (hp (h'_, l_)) x' \<and> bisim vs e2' unit (lcl (h'_, l_)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h'_, l_)]
[PROOF STEP]
by(fastforce simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>WriteMem a_ (ACell (nat (sint i_))) w_\<rbrace> (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) unit e2 (hp (h_, l_)) x ta e2' (hp (h'_, l_)) x' \<and> bisim vs e2' unit (lcl (h'_, l_)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h'_, l_)]

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
case (FAss1Red1 e s ta e' s' F D e2 Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (e\<bullet>F{D} := e2) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>F{D} := e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
             \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
[PROOF STEP]
have "\<not> is_val e"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val e

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 (e\<bullet>F{D}:=e2) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (e\<bullet>F{D} := e2) (lcl s)
\<not> is_val e
[PROOF STEP]
obtain E E2'
    where E2: "E2 = E\<bullet>F{D}:=E2'" "e2 = compE1 Vs E2'" and "bisim Vs E e (lcl s)"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (e\<bullet>F{D} := e2) (lcl s)
\<not> is_val e

goal (1 subgoal):
 1. (\<And>E E2'. \<lbrakk>E2 = E\<bullet>F{D} := E2'; e2 = compE1 Vs E2'; bisim Vs E e (lcl s); \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = E\<bullet>F{D} := E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
with IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (e\<bullet>F{D}:=e2) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>F{D} := e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = E\<bullet>F{D} := E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'
[PROOF STEP]
obtain TA' e2' x' where "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>F{D} := e2) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = E\<bullet>F{D} := E2'
e2 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (89 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 89 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<bullet>F{D} := E2'
e2 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = E\<bullet>F{D} := E2'
e2 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>F{D} := e2) (e'\<bullet>F{D} := e2) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>F{D} := e2) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(auto intro: FAssRed1)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>F{D} := e2) (e'\<bullet>F{D} := e2) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>F{D} := e2) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (88 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 88 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (88 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 88 subgoals...
[PROOF STEP]
case (FAss1Red2 e s ta e' s' v F D Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val v\<bullet>F{D} := e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>F{D} := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (88 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 88 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (88 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 88 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Val v\<bullet>F{D}:=e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val v\<bullet>F{D} := e) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = (Val v\<bullet>F{D}:=E)" and "bisim Vs E e (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val v\<bullet>F{D} := e) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val v\<bullet>F{D} := E; bisim Vs E e (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>F{D} := E
bisim Vs E e (lcl s)

goal (88 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 88 subgoals...
[PROOF STEP]
with IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (Val v\<bullet>F{D}:=e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
    E2
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>F{D} := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v\<bullet>F{D} := E
E2 = Val v\<bullet>F{D} := E
bisim Vs E e (lcl s)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>F{D} := e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v\<bullet>F{D} := E
E2 = Val v\<bullet>F{D} := E
bisim Vs E e (lcl s)

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>F{D} := e) (Val v\<bullet>F{D} := e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>F{D} := e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce intro: FAssRed2)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>F{D} := e) (Val v\<bullet>F{D} := e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>F{D} := e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
case (CAS1Red1 e s ta e' s' D F e2 e3 Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor> \<rbrakk>
             \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
[PROOF STEP]
have "\<not> is_val e"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val e

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 _ (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s)
\<not> is_val e
[PROOF STEP]
obtain E E2' E2''
    where E2: "E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')" "e2 = compE1 Vs E2'" "e3 = compE1 Vs E2''" and "bisim Vs E e (lcl s)"
    and sync: "\<not> contains_insync E2'" "\<not> contains_insync E2''"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s)
\<not> is_val e

goal (1 subgoal):
 1. (\<And>E E2' E2''. \<lbrakk>E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2''); e2 = compE1 Vs E2'; e3 = compE1 Vs E2''; bisim Vs E e (lcl s); \<not> contains_insync E2'; \<not> contains_insync E2''\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars _ \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where IH': "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<not> contains_insync E2''
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (87 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 87 subgoals...
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
proof(cases "is_val e2'")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
is_val e2'

goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
from E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
\<not> contains_insync E2''
[PROOF STEP]
have "bisim Vs E2' e2 (lcl s')" "bisim Vs E2'' e3 (lcl s')"
[PROOF STATE]
proof (prove)
using this:
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
\<not> contains_insync E2''

goal (1 subgoal):
 1. bisim Vs E2' e2 (lcl s') &&& bisim Vs E2'' e3 (lcl s')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bisim Vs E2' e2 (lcl s')
bisim Vs E2'' e3 (lcl s')

goal (2 subgoals):
 1. is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
 2. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
with IH' E2 True sync
[PROOF STATE]
proof (chain)
picking this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
is_val e2'
\<not> contains_insync E2'
\<not> contains_insync E2''
bisim Vs E2' e2 (lcl s')
bisim Vs E2'' e3 (lcl s')
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
is_val e2'
\<not> contains_insync E2'
\<not> contains_insync E2''
bisim Vs E2' e2 (lcl s')
bisim Vs E2'' e3 (lcl s')

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val E2'")(fastforce)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> is_val e2'

goal (1 subgoal):
 1. \<not> is_val e2' \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
with IH' E2 sync
[PROOF STATE]
proof (chain)
picking this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
\<not> contains_insync E2'
\<not> contains_insync E2''
\<not> is_val e2'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, E2', E2'')
e2 = compE1 Vs E2'
e3 = compE1 Vs E2''
\<not> contains_insync E2'
\<not> contains_insync E2''
\<not> is_val e2'

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
case (CAS1Red2 e s ta e' s' v D F e3 Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
[PROOF STEP]
have "\<not> is_val e"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>

goal (1 subgoal):
 1. \<not> is_val e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> is_val e

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
with \<open>bisim Vs E2 _ (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) (lcl s)
\<not> is_val e
[PROOF STEP]
obtain E E2'
    where E2: "E2 = (Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2'))" "e3 = compE1 Vs E2'" and "bisim Vs E e (lcl s)"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) (lcl s)
\<not> is_val e

goal (1 subgoal):
 1. (\<And>E E2'. \<lbrakk>E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2'); e3 = compE1 Vs E2'; bisim Vs E e (lcl s); \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars _ \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
bisim Vs E e (lcl s)
\<not> contains_insync E2'
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (86 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 86 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, E, E2')
e3 = compE1 Vs E2'
fv E2 \<subseteq> set Vs
\<not> contains_insync E2'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) (Val v\<bullet>compareAndSwap(D\<bullet>F, e', e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>compareAndSwap(D\<bullet>F, e', e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(fastforce)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>compareAndSwap(D\<bullet>F, e, e3)) (Val v\<bullet>compareAndSwap(D\<bullet>F, e', e3)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>compareAndSwap(D\<bullet>F, e', e3)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
case (CAS1Red3 e s ta e' s' v D F v' Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
             x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk>
            \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 _ (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E))" and "bisim Vs E e (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E); bisim Vs E e (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
bisim Vs E e (lcl s)

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
bisim Vs E e (lcl s)

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
note IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close> E2
    \<open>length Vs + max_vars _ \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (85 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 85 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
bisim Vs E e (lcl s)
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
E2 = Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', E)
length Vs + max_vars (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e')) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e')) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e)) (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e')) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>compareAndSwap(D\<bullet>F, Val v', e')) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
case (Call1Obj e s ta e' s' M es Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (e\<bullet>M(es)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
            x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s);
            \<D> e2 \<lfloor>dom x\<rfloor> \<rbrakk> \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close> \<open>bisim Vs E2 (e\<bullet>M(es)) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
bisim Vs E2 (e\<bullet>M(es)) (lcl s)
[PROOF STEP]
obtain E es' where E2: "E2 = E\<bullet>M(es')" "es = compEs1 Vs es'" and "bisim Vs E e (lcl s)"
    and sync: "\<not> contains_insyncs es'"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
bisim Vs E2 (e\<bullet>M(es)) (lcl s)

goal (1 subgoal):
 1. (\<And>E es'. \<lbrakk>E2 = E\<bullet>M(es'); es = compEs1 Vs es'; bisim Vs E e (lcl s); \<not> contains_insyncs es'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto elim!: bisim_cases simp add: compEs1_conv_map)
[PROOF STATE]
proof (state)
this:
E2 = E\<bullet>M(es')
es = compEs1 Vs es'
bisim Vs E e (lcl s)
\<not> contains_insyncs es'

goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
with IH[of Vs E X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (e\<bullet>M(es)) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = E\<bullet>M(es')
es = compEs1 Vs es'
bisim Vs E e (lcl s)
\<not> contains_insyncs es'
[PROOF STEP]
obtain TA' e2' x' where IH': "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim Vs e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim Vs E e (lcl s); fv E \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (e\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = E\<bullet>M(es')
es = compEs1 Vs es'
bisim Vs E e (lcl s)
\<not> contains_insyncs es'

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim Vs e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (84 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 84 subgoals...
[PROOF STEP]
with E2 \<open>fv E2 \<subseteq> set Vs\<close> \<open>E2 = E\<bullet>M(es')\<close> sync
[PROOF STATE]
proof (chain)
picking this:
E2 = E\<bullet>M(es')
es = compEs1 Vs es'
fv E2 \<subseteq> set Vs
E2 = E\<bullet>M(es')
\<not> contains_insyncs es'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = E\<bullet>M(es')
es = compEs1 Vs es'
fv E2 \<subseteq> set Vs
E2 = E\<bullet>M(es')
\<not> contains_insyncs es'
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim Vs e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>M(es)) (e'\<bullet>M(es)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>M(es)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(cases "is_val e2'")(auto intro: CallObj)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (e\<bullet>M(es)) (e'\<bullet>M(es)) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (e'\<bullet>M(es)) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (83 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 83 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (83 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 83 subgoals...
[PROOF STEP]
case (Call1Params es s ta es' s' v M Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>es,s\<rangle> [-ta\<rightarrow>] \<langle>es',s'\<rangle>
\<lbrakk>bisims ?vs31 ?es2.31 es (lcl s); fvs ?es2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_varss es \<le> length (lcl s); \<D>s ?es2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa es2' x'. sim_moves10 P t ta es es' ?es2.31 (hp s) ?x31 taa es2' (hp s') x' \<and> bisims ?vs31 es2' es' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (Val v\<bullet>M(es)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (83 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 83 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs es2 x. \<lbrakk> bisims vs es2 es (lcl s); fvs es2 \<subseteq> set vs;
            x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_varss es \<le> length (lcl s); \<D>s es2 \<lfloor>dom x\<rfloor>\<rbrakk>
           \<Longrightarrow> ?concls es es' es2 s x ta s' es' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisims ?vs ?es2.0 es (lcl s); fvs ?es2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_varss es \<le> length (lcl s); \<D>s ?es2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa es2' x'. sim_moves10 P t ta es es' ?es2.0 (hp s) ?x taa es2' (hp s') x' \<and> bisims ?vs es2' es' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (83 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 83 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (Val v\<bullet>M(es)) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (Val v\<bullet>M(es)) (lcl s)
[PROOF STEP]
obtain Es
    where "E2 = Val v \<bullet>M(Es)" "bisims Vs Es es (lcl s)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (Val v\<bullet>M(es)) (lcl s)

goal (1 subgoal):
 1. (\<And>Es. \<lbrakk>E2 = Val v\<bullet>M(Es); bisims Vs Es es (lcl s)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = Val v\<bullet>M(Es)
bisims Vs Es es (lcl s)

goal (83 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 83 subgoals...
[PROOF STEP]
with IH[of Vs Es X] \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (Val v\<bullet>M(es)) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
    \<open>E2 = Val v \<bullet>M(Es)\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisims Vs Es es (lcl s); fvs Es \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_varss es \<le> length (lcl s); \<D>s Es \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa es2' x'. sim_moves10 P t ta es es' Es (hp s) X taa es2' (hp s') x' \<and> bisims Vs es2' es' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v\<bullet>M(Es)
E2 = Val v\<bullet>M(Es)
bisims Vs Es es (lcl s)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisims Vs Es es (lcl s); fvs Es \<subseteq> set Vs; X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]; length Vs + max_varss es \<le> length (lcl s); \<D>s Es \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa es2' x'. sim_moves10 P t ta es es' Es (hp s) X taa es2' (hp s') x' \<and> bisims Vs es2' es' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (Val v\<bullet>M(es)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
E2 = Val v\<bullet>M(Es)
E2 = Val v\<bullet>M(Es)
bisims Vs Es es (lcl s)

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>M(es)) (Val v\<bullet>M(es')) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>M(es')) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce intro: CallParams)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (Val v\<bullet>M(es)) (Val v\<bullet>M(es')) E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (Val v\<bullet>M(es')) (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
case (Red1CallExternal s a T M Ts Tr D vs ta va h' e' s' Vs E2 X)
[PROOF STATE]
proof (state)
this:
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
compP1 P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
compP1 P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
bisim Vs E2 (addr a\<bullet>M(map Val vs)) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (addr a\<bullet>M(map Val vs)) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (addr a\<bullet>M(map Val vs)) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (addr a\<bullet>M(map Val vs)) (lcl s)
[PROOF STEP]
have E2: "E2 = addr a\<bullet>M(map Val vs)"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (addr a\<bullet>M(map Val vs)) (lcl s)

goal (1 subgoal):
 1. E2 = addr a\<bullet>M(map Val vs)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = addr a\<bullet>M(map Val vs)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = addr a\<bullet>M(map Val vs)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
from \<open>compP1 P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D\<close>
[PROOF STATE]
proof (chain)
picking this:
compP1 P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
[PROOF STEP]
have "P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D"
[PROOF STATE]
proof (prove)
using this:
compP1 P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D

goal (1 subgoal):
 1. P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
from \<open>compP1 P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
compP1 P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
[PROOF STEP]
have "P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>"
[PROOF STATE]
proof (prove)
using this:
compP1 P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>

goal (1 subgoal):
 1. P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
from wf \<open>P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
wf_J_prog P
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
[PROOF STEP]
have "ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)"
[PROOF STATE]
proof (prove)
using this:
wf_J_prog P
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>

goal (1 subgoal):
 1. ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
[PROOF STEP]
by(rule red_external_ta_bisim01)
[PROOF STATE]
proof (state)
this:
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
note \<open>typeof_addr (hp s) a = \<lfloor>T\<rfloor>\<close> \<open>e' = extRet2J1 (addr a\<bullet>M(map Val vs)) va\<close> \<open>s' = (h', lcl s)\<close>
[PROOF STATE]
proof (state)
this:
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
from \<open>typeof_addr (hp s) a = \<lfloor>T\<rfloor>\<close> \<open>P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>\<close>
    \<open>P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D\<close>
[PROOF STATE]
proof (chain)
picking this:
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
[PROOF STEP]
have "\<tau>external_defs D M \<Longrightarrow> ta = \<epsilon> \<and> h' = hp s"
[PROOF STATE]
proof (prove)
using this:
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D

goal (1 subgoal):
 1. \<tau>external_defs D M \<Longrightarrow> ta = \<lbrace>\<rbrace> \<and> h' = hp s
[PROOF STEP]
by(fastforce dest: \<tau>external'_red_external_heap_unchanged \<tau>external'_red_external_TA_empty simp add: \<tau>external'_def \<tau>external_def)
[PROOF STATE]
proof (state)
this:
\<tau>external_defs D M \<Longrightarrow> ta = \<lbrace>\<rbrace> \<and> h' = hp s

goal (82 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 82 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = addr a\<bullet>M(map Val vs)
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
\<tau>external_defs D M \<Longrightarrow> ta = \<lbrace>\<rbrace> \<and> h' = hp s
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = addr a\<bullet>M(map Val vs)
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
\<tau>external_defs D M \<Longrightarrow> ta = \<lbrace>\<rbrace> \<and> h' = hp s

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (addr a\<bullet>M(map Val vs)) e' E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
using \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (prove)
using this:
E2 = addr a\<bullet>M(map Val vs)
P \<turnstile> class_type_of T sees M: Ts\<rightarrow>Tr = Native in D
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
\<tau>external_defs D M \<Longrightarrow> ta = \<lbrace>\<rbrace> \<and> h' = hp s
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (addr a\<bullet>M(map Val vs)) e' E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(fastforce intro!: exI[where x="extTA2J0 P ta"] intro: RedCallExternal simp add: map_eq_append_conv sim_move10_def synthesized_call_def dest: sees_method_fun del: disjCI intro: disjI1 disjI2)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (addr a\<bullet>M(map Val vs)) e' E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
case (Block1Red e h x ta e' h' x' V T Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl (h, x)); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl (h, x)]; length ?vs31 + max_vars e \<le> length (lcl (h, x)); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' ?e2.31 (hp (h, x)) ?x31 taa e2' (hp (h', x')) x'a \<and> bisim ?vs31 e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl (h', x')]
bisim Vs E2 {V:T=None; e} (lcl (h, x))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 xa. \<lbrakk> bisim vs e2 e (lcl (h, x)); fv e2 \<subseteq> set vs; xa \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, x)];
                       length vs + max_vars e \<le> length (lcl (h, x)); \<D> e2 \<lfloor>dom xa\<rfloor>\<rbrakk>
             \<Longrightarrow> ?concl e e' e2 (h, x) xa ta (h', x') e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl (h, x)); fv ?e2.0 \<subseteq> set ?vs; ?xa \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl (h, x)]; length ?vs + max_vars e \<le> length (lcl (h, x)); \<D> ?e2.0 \<lfloor>dom ?xa\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' ?e2.0 (hp (h, x)) ?xa taa e2' (hp (h', x')) x'a \<and> bisim ?vs e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl (h', x')]

goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
[PROOF STEP]
have "length x = length x'"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>

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

goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
with \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
length x = length x'
[PROOF STEP]
have "length Vs < length x'"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
length x = length x'

goal (1 subgoal):
 1. length Vs < length x'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
length Vs < length x'

goal (81 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 81 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 {V:T=None; e} (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 {V:T=None; e} (lcl (h, x))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 {V:T=None; e} (lcl (h, x))

goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
proof(cases rule: bisim_cases(14)[consumes 1, case_names BlockNone BlockSome BlockSomeNone])
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
case (BlockNone V' E)
[PROOF STATE]
proof (state)
this:
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>fv E2 \<subseteq> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
[PROOF STEP]
have "fv E \<subseteq> set (Vs@[V'])"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None

goal (1 subgoal):
 1. fv E \<subseteq> set (Vs @ [V'])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fv E \<subseteq> set (Vs @ [V'])

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with IH[of "Vs@[V']" E "X(V' := None)"] BlockNone \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]\<close>
      \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim (Vs @ [V']) E e (lcl (h, x)); fv E \<subseteq> set (Vs @ [V']); X(V' := None) \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h, x)]; length (Vs @ [V']) + max_vars e \<le> length (lcl (h, x)); \<D> E \<lfloor>dom (X(V' := None))\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' E (hp (h, x)) (X(V' := None)) taa e2' (hp (h', x')) x'a \<and> bisim (Vs @ [V']) e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h', x')]
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>
fv E \<subseteq> set (Vs @ [V'])
[PROOF STEP]
obtain TA' e2' X' where IH': "sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'"
      "bisim (Vs @ [V']) e2' e' x'" "X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim (Vs @ [V']) E e (lcl (h, x)); fv E \<subseteq> set (Vs @ [V']); X(V' := None) \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h, x)]; length (Vs @ [V']) + max_vars e \<le> length (lcl (h, x)); \<D> E \<lfloor>dom (X(V' := None))\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' E (hp (h, x)) (X(V' := None)) taa e2' (hp (h', x')) x'a \<and> bisim (Vs @ [V']) e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h', x')]
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>
fv E \<subseteq> set (Vs @ [V'])

goal (1 subgoal):
 1. (\<And>TA' e2' X'. \<lbrakk>sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'; bisim (Vs @ [V']) e2' e' x'; X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
assume "V' \<in> set Vs"
[PROOF STATE]
proof (state)
this:
V' \<in> set Vs

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
hence "hidden (Vs @ [V']) (index Vs V')"
[PROOF STATE]
proof (prove)
using this:
V' \<in> set Vs

goal (1 subgoal):
 1. hidden (Vs @ [V']) (index Vs V')
[PROOF STEP]
by(rule hidden_index)
[PROOF STATE]
proof (state)
this:
hidden (Vs @ [V']) (index Vs V')

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>bisim (Vs @ [V']) E e (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V']) E e (lcl (h, x))
hidden (Vs @ [V']) (index Vs V')
[PROOF STEP]
have "unmod e (index Vs V')"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [V']) E e (lcl (h, x))
hidden (Vs @ [V']) (index Vs V')

goal (1 subgoal):
 1. unmod e (index Vs V')
[PROOF STEP]
by(auto intro: hidden_bisim_unmod)
[PROOF STATE]
proof (state)
this:
unmod e (index Vs V')

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
unmod e (index Vs V')

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
from \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close> \<open>V' \<in> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
V' \<in> set Vs
[PROOF STEP]
have "index Vs V' < length x"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
V' \<in> set Vs

goal (1 subgoal):
 1. index Vs V' < length x
[PROOF STEP]
by(auto intro: index_less_aux)
[PROOF STATE]
proof (state)
this:
index Vs V' < length x

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
unmod e (index Vs V')
index Vs V' < length x
[PROOF STEP]
have "x ! index Vs V' = x' ! index Vs V'"
[PROOF STATE]
proof (prove)
using this:
unmod e (index Vs V')
index Vs V' < length x

goal (1 subgoal):
 1. x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
using red1_preserves_unmod[OF \<open>False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>\<close>]
[PROOF STATE]
proof (prove)
using this:
unmod e (index Vs V')
index Vs V' < length x
unmod e ?i \<Longrightarrow> lcl (h', x') ! ?i = lcl (h, x) ! ?i

goal (1 subgoal):
 1. x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
x ! index Vs V' = x' ! index Vs V'

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close>
      \<open>X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<close> \<open>length x = length x'\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length x = length x'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
have rel: "X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length x = length x'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'

goal (1 subgoal):
 1. X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
[PROOF STEP]
by(auto intro: Block_lem)
[PROOF STATE]
proof (state)
this:
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']

goal (3 subgoals):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=None; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 3. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
proof(cases "X' V'")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. X' V' = None \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
case None
[PROOF STATE]
proof (state)
this:
X' V' = None

goal (2 subgoals):
 1. X' V' = None \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with BlockNone IH' rel
[PROOF STATE]
proof (chain)
picking this:
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = None
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = None

goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
by(fastforce intro: BlockRed)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal (1 subgoal):
 1. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
case (Some v)
[PROOF STATE]
proof (state)
this:
X' V' = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<close> \<open>length Vs < length x'\<close>
[PROOF STATE]
proof (chain)
picking this:
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length Vs < length x'
X' V' = \<lfloor>v\<rfloor>
[PROOF STEP]
have "x' ! length Vs = v"
[PROOF STATE]
proof (prove)
using this:
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length Vs < length x'
X' V' = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. x' ! length Vs = v
[PROOF STEP]
by(auto dest: map_le_SomeD)
[PROOF STATE]
proof (state)
this:
x' ! length Vs = v

goal (1 subgoal):
 1. \<And>a. X' V' = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with BlockNone IH' rel Some
[PROOF STATE]
proof (chain)
picking this:
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = \<lfloor>v\<rfloor>
x' ! length Vs = v
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
E2 = {V':T=None; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' := None)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = \<lfloor>v\<rfloor>
x' ! length Vs = v

goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
by(fastforce intro: BlockRed)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal (2 subgoals):
 1. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
case BlockSome
[PROOF STATE]
proof (state)
this:
E2 = {V_:T=\<lfloor>v_\<rfloor>; e_}
bisim (Vs @ [V_]) e_ e ((lcl (h, x))[length Vs := v_])
V = length Vs
None = \<lfloor>v_\<rfloor>

goal (2 subgoals):
 1. \<And>Va ea v. \<lbrakk>E2 = {Va:T=\<lfloor>v\<rfloor>; ea}; bisim (Vs @ [Va]) ea e ((lcl (h, x))[length Vs := v]); V = length Vs; None = \<lfloor>v\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
 2. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
E2 = {V_:T=\<lfloor>v_\<rfloor>; e_}
bisim (Vs @ [V_]) e_ e ((lcl (h, x))[length Vs := v_])
V = length Vs
None = \<lfloor>v_\<rfloor>

goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
case (BlockSomeNone V' E)
[PROOF STATE]
proof (state)
this:
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>fv E2 \<subseteq> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
[PROOF STEP]
have "fv E \<subseteq> set (Vs@[V'])"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None

goal (1 subgoal):
 1. fv E \<subseteq> set (Vs @ [V'])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fv E \<subseteq> set (Vs @ [V'])

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with IH[of "Vs@[V']" E "X(V' \<mapsto> x ! length Vs)"] BlockSomeNone \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]\<close>
      \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>bisim (Vs @ [V']) E e (lcl (h, x)); fv E \<subseteq> set (Vs @ [V']); X(V' \<mapsto> x ! length Vs) \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h, x)]; length (Vs @ [V']) + max_vars e \<le> length (lcl (h, x)); \<D> E \<lfloor>dom (X(V' \<mapsto> x ! length Vs))\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' E (hp (h, x)) (X(V' \<mapsto> x ! length Vs)) taa e2' (hp (h', x')) x'a \<and> bisim (Vs @ [V']) e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h', x')]
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>
fv E \<subseteq> set (Vs @ [V'])
[PROOF STEP]
obtain TA' e2' X' where IH': "sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'"
      "bisim (Vs @ [V']) e2' e' x'" "X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>bisim (Vs @ [V']) E e (lcl (h, x)); fv E \<subseteq> set (Vs @ [V']); X(V' \<mapsto> x ! length Vs) \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h, x)]; length (Vs @ [V']) + max_vars e \<le> length (lcl (h, x)); \<D> E \<lfloor>dom (X(V' \<mapsto> x ! length Vs))\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta e e' E (hp (h, x)) (X(V' \<mapsto> x ! length Vs)) taa e2' (hp (h', x')) x'a \<and> bisim (Vs @ [V']) e2' e' (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] lcl (h', x')]
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>
fv E \<subseteq> set (Vs @ [V'])

goal (1 subgoal):
 1. (\<And>TA' e2' X'. \<lbrakk>sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'; bisim (Vs @ [V']) e2' e' x'; X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
assume "V' \<in> set Vs"
[PROOF STATE]
proof (state)
this:
V' \<in> set Vs

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
hence "hidden (Vs @ [V']) (index Vs V')"
[PROOF STATE]
proof (prove)
using this:
V' \<in> set Vs

goal (1 subgoal):
 1. hidden (Vs @ [V']) (index Vs V')
[PROOF STEP]
by(rule hidden_index)
[PROOF STATE]
proof (state)
this:
hidden (Vs @ [V']) (index Vs V')

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>bisim (Vs @ [V']) E e (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V']) E e (lcl (h, x))
hidden (Vs @ [V']) (index Vs V')
[PROOF STEP]
have "unmod e (index Vs V')"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [V']) E e (lcl (h, x))
hidden (Vs @ [V']) (index Vs V')

goal (1 subgoal):
 1. unmod e (index Vs V')
[PROOF STEP]
by(auto intro: hidden_bisim_unmod)
[PROOF STATE]
proof (state)
this:
unmod e (index Vs V')

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
unmod e (index Vs V')

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
from \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close> \<open>V' \<in> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
V' \<in> set Vs
[PROOF STEP]
have "index Vs V' < length x"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
V' \<in> set Vs

goal (1 subgoal):
 1. index Vs V' < length x
[PROOF STEP]
by(auto intro: index_less_aux)
[PROOF STATE]
proof (state)
this:
index Vs V' < length x

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
unmod e (index Vs V')
index Vs V' < length x
[PROOF STEP]
have "x ! index Vs V' = x' ! index Vs V'"
[PROOF STATE]
proof (prove)
using this:
unmod e (index Vs V')
index Vs V' < length x

goal (1 subgoal):
 1. x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
using red1_preserves_unmod[OF \<open>False,compP1 P,t \<turnstile>1 \<langle>e,(h, x)\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>\<close>]
[PROOF STATE]
proof (prove)
using this:
unmod e (index Vs V')
index Vs V' < length x
unmod e ?i \<Longrightarrow> lcl (h', x') ! ?i = lcl (h, x) ! ?i

goal (1 subgoal):
 1. x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
x ! index Vs V' = x' ! index Vs V'

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))\<close>
      \<open>X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<close> \<open>length x = length x'\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length x = length x'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'
[PROOF STEP]
have rel: "X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=None; e} \<le> length (lcl (h, x))
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length x = length x'
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
V' \<in> set Vs \<Longrightarrow> x ! index Vs V' = x' ! index Vs V'

goal (1 subgoal):
 1. X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
[PROOF STEP]
by(auto intro: Block_lem)
[PROOF STATE]
proof (state)
this:
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
from \<open>sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'
[PROOF STEP]
obtain v' where "X' V' = \<lfloor>v'\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'

goal (1 subgoal):
 1. (\<And>v'. X' V' = \<lfloor>v'\<rfloor> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto simp: sim_move10_def split: if_split_asm dest!: \<tau>red0t_lcl_incr \<tau>red0r_lcl_incr red_lcl_incr subsetD)
[PROOF STATE]
proof (state)
this:
X' V' = \<lfloor>v'\<rfloor>

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with \<open>X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']\<close> \<open>length Vs < length x'\<close>
[PROOF STATE]
proof (chain)
picking this:
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length Vs < length x'
X' V' = \<lfloor>v'\<rfloor>
[PROOF STEP]
have "x' ! length Vs = v'"
[PROOF STATE]
proof (prove)
using this:
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
length Vs < length x'
X' V' = \<lfloor>v'\<rfloor>

goal (1 subgoal):
 1. x' ! length Vs = v'
[PROOF STEP]
by(auto dest: map_le_SomeD)
[PROOF STATE]
proof (state)
this:
x' ! length Vs = v'

goal (1 subgoal):
 1. \<And>Va ea. \<lbrakk>E2 = {Va:T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; ea}; bisim (Vs @ [Va]) ea e (lcl (h, x)); V = length Vs; None = None\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
with BlockSomeNone IH' rel \<open>X' V' = \<lfloor>v'\<rfloor>\<close>
[PROOF STATE]
proof (chain)
picking this:
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = \<lfloor>v'\<rfloor>
x' ! length Vs = v'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
E2 = {V':T=\<lfloor>lcl (h, x) ! length Vs\<rfloor>; E}
bisim (Vs @ [V']) E e (lcl (h, x))
V = length Vs
None = None
sim_move10 P t ta e e' E h (X(V' \<mapsto> x ! length Vs)) TA' e2' h' X'
bisim (Vs @ [V']) e2' e' x'
X' \<subseteq>\<^sub>m [Vs @ [V'] [\<mapsto>] x']
X'(V' := X V') \<subseteq>\<^sub>m [Vs [\<mapsto>] x']
X' V' = \<lfloor>v'\<rfloor>
x' ! length Vs = v'

goal (1 subgoal):
 1. \<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]
[PROOF STEP]
by(fastforce intro: BlockRed)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'a. sim_move10 P t ta {V:T=None; e} {V:T=None; e'} E2 (hp (h, x)) X taa e2' (hp (h', x')) x'a \<and> bisim Vs e2' {V:T=None; e'} (lcl (h', x')) \<and> x'a \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h', x')]

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
case(Block1Some V xs T v e h)
[PROOF STATE]
proof (state)
this:
V < length xs
bisim vs e2 {V:T=\<lfloor>v\<rfloor>; e} (lcl (h, xs))
fv e2 \<subseteq> set vs
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs)]
length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))
\<D> e2 \<lfloor>dom x\<rfloor>

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
from \<open>bisim vs e2 {V:T=\<lfloor>v\<rfloor>; e} (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim vs e2 {V:T=\<lfloor>v\<rfloor>; e} (lcl (h, xs))
[PROOF STEP]
obtain e' V' where "e2 = {V':T=\<lfloor>v\<rfloor>; e'}"
    and "V = length vs" "bisim (vs @ [V']) e' e (xs[length vs := v])"
[PROOF STATE]
proof (prove)
using this:
bisim vs e2 {V:T=\<lfloor>v\<rfloor>; e} (lcl (h, xs))

goal (1 subgoal):
 1. (\<And>V' e'. \<lbrakk>e2 = {V':T=\<lfloor>v\<rfloor>; e'}; V = length vs; bisim (vs @ [V']) e' e (xs[length vs := v])\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
e2 = {V':T=\<lfloor>v\<rfloor>; e'}
V = length vs
bisim (vs @ [V']) e' e (xs[length vs := v])

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
e2 = {V':T=\<lfloor>v\<rfloor>; e'}
V = length vs
bisim (vs @ [V']) e' e (xs[length vs := v])

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
have "sim_move10 P t \<epsilon> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<epsilon> {V':T=\<lfloor>v\<rfloor>; e'} h x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sim_move10 P t \<lbrace>\<rbrace> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<lbrace>\<rbrace> {V':T=\<lfloor>v\<rfloor>; e'} h x
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
sim_move10 P t \<lbrace>\<rbrace> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<lbrace>\<rbrace> {V':T=\<lfloor>v\<rfloor>; e'} h x

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
sim_move10 P t \<lbrace>\<rbrace> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<lbrace>\<rbrace> {V':T=\<lfloor>v\<rfloor>; e'} h x

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
from \<open>bisim (vs @ [V']) e' e (xs[length vs := v])\<close>
    \<open>length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (vs @ [V']) e' e (xs[length vs := v])
length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))
[PROOF STEP]
have "bisim vs {V':T=\<lfloor>v\<rfloor>; e'} {length vs:T=None; e} (xs[length vs := v])"
[PROOF STATE]
proof (prove)
using this:
bisim (vs @ [V']) e' e (xs[length vs := v])
length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))

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

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
bisim vs {V':T=\<lfloor>v\<rfloor>; e'} {length vs:T=None; e} (xs[length vs := v])

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
from \<open>x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs)]\<close> \<open>length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs)]
length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))
[PROOF STEP]
have "x \<subseteq>\<^sub>m [vs [\<mapsto>] xs[length vs := v]]"
[PROOF STATE]
proof (prove)
using this:
x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs)]
length vs + max_vars {V:T=\<lfloor>v\<rfloor>; e} \<le> length (lcl (h, xs))

goal (1 subgoal):
 1. x \<subseteq>\<^sub>m [vs [\<mapsto>] xs[length vs := v]]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<subseteq>\<^sub>m [vs [\<mapsto>] xs[length vs := v]]

goal (80 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 80 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
e2 = {V':T=\<lfloor>v\<rfloor>; e'}
V = length vs
bisim (vs @ [V']) e' e (xs[length vs := v])
sim_move10 P t \<lbrace>\<rbrace> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<lbrace>\<rbrace> {V':T=\<lfloor>v\<rfloor>; e'} h x
bisim vs {V':T=\<lfloor>v\<rfloor>; e'} {length vs:T=None; e} (xs[length vs := v])
x \<subseteq>\<^sub>m [vs [\<mapsto>] xs[length vs := v]]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
e2 = {V':T=\<lfloor>v\<rfloor>; e'}
V = length vs
bisim (vs @ [V']) e' e (xs[length vs := v])
sim_move10 P t \<lbrace>\<rbrace> {length vs:T=\<lfloor>v\<rfloor>; e} {length vs:T=None; e} {V':T=\<lfloor>v\<rfloor>; e'} h x \<lbrace>\<rbrace> {V':T=\<lfloor>v\<rfloor>; e'} h x
bisim vs {V':T=\<lfloor>v\<rfloor>; e'} {length vs:T=None; e} (xs[length vs := v])
x \<subseteq>\<^sub>m [vs [\<mapsto>] xs[length vs := v]]

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> {V:T=\<lfloor>v\<rfloor>; e} {V:T=None; e} e2 (hp (h, xs)) x ta e2' (hp (h, xs[V := v])) x' \<and> bisim vs e2' {V:T=None; e} (lcl (h, xs[V := v])) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs[V := v])]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> {V:T=\<lfloor>v\<rfloor>; e} {V:T=None; e} e2 (hp (h, xs)) x ta e2' (hp (h, xs[V := v])) x' \<and> bisim vs e2' {V:T=None; e} (lcl (h, xs[V := v])) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, xs[V := v])]

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
case (Lock1Synchronized V xs a e h Vs E2 X)
[PROOF STATE]
proof (state)
this:
V < length xs
bisim Vs E2 (sync\<^bsub>V\<^esub> (addr a) e) (lcl (h, xs))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) e) \<le> length (lcl (h, xs))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
note len = \<open>length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) e) \<le> length (lcl (h, xs))\<close>
[PROOF STATE]
proof (state)
this:
length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) e) \<le> length (lcl (h, xs))

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (sync\<^bsub>V\<^esub> (addr a) e) (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (sync\<^bsub>V\<^esub> (addr a) e) (lcl (h, xs))
[PROOF STEP]
obtain E
    where E2: "E2 = sync(addr a) E" "e = compE1 (Vs@[fresh_var Vs]) E"
    and sync: "\<not> contains_insync E" and [simp]: "V = length Vs"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (sync\<^bsub>V\<^esub> (addr a) e) (lcl (h, xs))

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = sync(addr a) E; e = compE1 (Vs @ [fresh_var Vs]) E; \<not> contains_insync E; V = length Vs\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = sync(addr a) E
e = compE1 (Vs @ [fresh_var Vs]) E
\<not> contains_insync E
V = length Vs

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = sync(addr a) E
e = compE1 (Vs @ [fresh_var Vs]) E
\<not> contains_insync E
V = length Vs

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
have "extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E, (h, X)\<rangle> -\<lbrace>Lock\<rightarrow>a, SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E, (h, X)\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E,(h, X)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E,(h, X)\<rangle>
[PROOF STEP]
by(rule LockSynchronized)
[PROOF STATE]
proof (state)
this:
extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E,(h, X)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E,(h, X)\<rangle>

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E,(h, X)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E,(h, X)\<rangle>

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
from \<open>fv E2 \<subseteq> set Vs\<close> fresh_var_fresh[of Vs] sync len
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
fresh_var Vs \<notin> set Vs
\<not> contains_insync E
length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) e) \<le> length (lcl (h, xs))
[PROOF STEP]
have "bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
fresh_var Vs \<notin> set Vs
\<not> contains_insync E
length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) e) \<le> length (lcl (h, xs))

goal (1 subgoal):
 1. bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])
[PROOF STEP]
unfolding \<open>e = compE1 (Vs@[fresh_var Vs]) E\<close> \<open>E2 = sync(addr a) E\<close>
[PROOF STATE]
proof (prove)
using this:
fv (sync(addr a) E) \<subseteq> set Vs
fresh_var Vs \<notin> set Vs
\<not> contains_insync E
length Vs + max_vars (sync\<^bsub>V\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) E) \<le> length (lcl (h, xs))

goal (1 subgoal):
 1. bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) E) (xs[length Vs := Addr a])
[PROOF STEP]
by -(rule bisimInSynchronized,rule compE1_bisim, auto)
[PROOF STATE]
proof (state)
this:
bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
have "zip Vs (xs[length Vs := Addr a]) = (zip Vs xs)[length Vs := (arbitrary, Addr a)]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. zip Vs (xs[length Vs := Addr a]) = (zip Vs xs)[length Vs := (arbitrary, Addr a)]
[PROOF STEP]
by(rule sym)(simp add: update_zip)
[PROOF STATE]
proof (state)
this:
zip Vs (xs[length Vs := Addr a]) = (zip Vs xs)[length Vs := (arbitrary, Addr a)]

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
hence "zip Vs (xs[length Vs := Addr a]) = zip Vs xs"
[PROOF STATE]
proof (prove)
using this:
zip Vs (xs[length Vs := Addr a]) = (zip Vs xs)[length Vs := (arbitrary, Addr a)]

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

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
with \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] (lcl (h, xs))]\<close>
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
zip Vs (xs[length Vs := Addr a]) = zip Vs xs
[PROOF STEP]
have "X \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
zip Vs (xs[length Vs := Addr a]) = zip Vs xs

goal (1 subgoal):
 1. X \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]
[PROOF STEP]
by(auto simp add: map_le_def map_upds_def)
[PROOF STATE]
proof (state)
this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 79 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = sync(addr a) E
e = compE1 (Vs @ [fresh_var Vs]) E
\<not> contains_insync E
V = length Vs
extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E,(h, X)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E,(h, X)\<rangle>
bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])
X \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = sync(addr a) E
e = compE1 (Vs @ [fresh_var Vs]) E
\<not> contains_insync E
V = length Vs
extTA2J0 P,P,t \<turnstile> \<langle>sync(addr a) E,(h, X)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync(a) E,(h, X)\<rangle>
bisim Vs (insync(a) E) (insync\<^bsub>length Vs\<^esub> (a) e) (xs[length Vs := Addr a])
X \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync\<^bsub>V\<^esub> (addr a) e) (insync\<^bsub>V\<^esub> (a) e) E2 (hp (h, xs)) X ta e2' (hp (h, xs[V := Addr a])) x' \<and> bisim Vs e2' (insync\<^bsub>V\<^esub> (a) e) (lcl (h, xs[V := Addr a])) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs[V := Addr a])]
[PROOF STEP]
by(fastforce intro: sim_move10_SyncLocks)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync\<^bsub>V\<^esub> (addr a) e) (insync\<^bsub>V\<^esub> (a) e) E2 (hp (h, xs)) X ta e2' (hp (h, xs[V := Addr a])) x' \<and> bisim Vs e2' (insync\<^bsub>V\<^esub> (a) e) (lcl (h, xs[V := Addr a])) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs[V := Addr a])]

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
case (Synchronized1Red2 e s ta e' s' V a Vs E2 X)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<lbrakk>bisim ?vs31 ?e2.31 e (lcl s); fv ?e2.31 \<subseteq> set ?vs31; ?x31 \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s]; length ?vs31 + max_vars e \<le> length (lcl s); \<D> ?e2.31 \<lfloor>dom ?x31\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.31 (hp s) ?x31 taa e2' (hp s') x' \<and> bisim ?vs31 e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] lcl s']
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) e) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
note IH = \<open>\<And>vs e2 x. \<lbrakk> bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs;
            x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s);
            \<D> e2 \<lfloor>dom x\<rfloor> \<rbrakk> \<Longrightarrow> ?concl e e' e2 s x ta s' e' vs\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim ?vs ?e2.0 e (lcl s); fv ?e2.0 \<subseteq> set ?vs; ?x \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s]; length ?vs + max_vars e \<le> length (lcl s); \<D> ?e2.0 \<lfloor>dom ?x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' ?e2.0 (hp s) ?x taa e2' (hp s') x' \<and> bisim ?vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [?vs [\<mapsto>] lcl s']

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (insync\<^bsub>V\<^esub> (a) e) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) e) (lcl s)
[PROOF STEP]
obtain E
    where E2: "E2 = insync(a) E" and bisim: "bisim (Vs@[fresh_var Vs]) E e (lcl s)"
    and xsa: "lcl s ! length Vs = Addr a" and [simp]: "V = length Vs"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) e) (lcl s)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = insync(a) E; bisim (Vs @ [fresh_var Vs]) E e (lcl s); lcl s ! length Vs = Addr a; V = length Vs\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = insync(a) E
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
lcl s ! length Vs = Addr a
V = length Vs

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
with \<open>fv E2 \<subseteq> set Vs\<close> fresh_var_fresh[of Vs]
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
fresh_var Vs \<notin> set Vs
E2 = insync(a) E
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
lcl s ! length Vs = Addr a
V = length Vs
[PROOF STEP]
have fv: "(fresh_var Vs) \<notin> fv E"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
fresh_var Vs \<notin> set Vs
E2 = insync(a) E
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
lcl s ! length Vs = Addr a
V = length Vs

goal (1 subgoal):
 1. fresh_var Vs \<notin> fv E
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fresh_var Vs \<notin> fv E

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
from \<open>length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)
[PROOF STEP]
have "length Vs < length (lcl s)"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)

goal (1 subgoal):
 1. length Vs < length (lcl s)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
length Vs < length (lcl s)

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
length Vs < length (lcl s)

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
assume "X (fresh_var Vs) \<noteq> None"
[PROOF STATE]
proof (state)
this:
X (fresh_var Vs) \<noteq> None

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
X (fresh_var Vs) \<noteq> None
[PROOF STEP]
obtain v where "X (fresh_var Vs) = \<lfloor>v\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
X (fresh_var Vs) \<noteq> None

goal (1 subgoal):
 1. (\<And>v. X (fresh_var Vs) = \<lfloor>v\<rfloor> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
X (fresh_var Vs) = \<lfloor>v\<rfloor>

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
with \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
X (fresh_var Vs) = \<lfloor>v\<rfloor>
[PROOF STEP]
have "[Vs [\<mapsto>] lcl s] (fresh_var Vs) = \<lfloor>v\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
X (fresh_var Vs) = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. [Vs [\<mapsto>] lcl s] (fresh_var Vs) = \<lfloor>v\<rfloor>
[PROOF STEP]
by(auto simp add: map_le_def dest: bspec)
[PROOF STATE]
proof (state)
this:
[Vs [\<mapsto>] lcl s] (fresh_var Vs) = \<lfloor>v\<rfloor>

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
hence "(fresh_var Vs) \<in> set Vs"
[PROOF STATE]
proof (prove)
using this:
[Vs [\<mapsto>] lcl s] (fresh_var Vs) = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. fresh_var Vs \<in> set Vs
[PROOF STEP]
by(auto simp add: map_upds_def set_zip dest!: map_of_SomeD )
[PROOF STATE]
proof (state)
this:
fresh_var Vs \<in> set Vs

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
fresh_var Vs \<in> set Vs

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
have "(fresh_var Vs) \<notin> set Vs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fresh_var Vs \<notin> set Vs
[PROOF STEP]
by(rule fresh_var_fresh)
[PROOF STATE]
proof (state)
this:
fresh_var Vs \<notin> set Vs

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
fresh_var Vs \<in> set Vs
fresh_var Vs \<notin> set Vs
[PROOF STEP]
have False
[PROOF STATE]
proof (prove)
using this:
fresh_var Vs \<in> set Vs
fresh_var Vs \<notin> set Vs

goal (1 subgoal):
 1. False
[PROOF STEP]
by contradiction
[PROOF STATE]
proof (state)
this:
False

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
X (fresh_var Vs) \<noteq> None \<Longrightarrow> False

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
hence "X (fresh_var Vs) = None"
[PROOF STATE]
proof (prove)
using this:
X (fresh_var Vs) \<noteq> None \<Longrightarrow> False

goal (1 subgoal):
 1. X (fresh_var Vs) = None
[PROOF STEP]
by(cases "X (fresh_var Vs)", auto)
[PROOF STATE]
proof (state)
this:
X (fresh_var Vs) = None

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
hence "X(fresh_var Vs := None) = X"
[PROOF STATE]
proof (prove)
using this:
X (fresh_var Vs) = None

goal (1 subgoal):
 1. X(fresh_var Vs := None) = X
[PROOF STEP]
by(auto intro: ext)
[PROOF STATE]
proof (state)
this:
X(fresh_var Vs := None) = X

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
X(fresh_var Vs := None) = X

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
from \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
[PROOF STEP]
have "X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, (fresh_var Vs) \<mapsto> (lcl s) ! length Vs]"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]

goal (1 subgoal):
 1. X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, fresh_var Vs \<mapsto> lcl s ! length Vs]
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, fresh_var Vs \<mapsto> lcl s ! length Vs]

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
X(fresh_var Vs := None) = X
X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, fresh_var Vs \<mapsto> lcl s ! length Vs]
[PROOF STEP]
have "X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]"
[PROOF STATE]
proof (prove)
using this:
X(fresh_var Vs := None) = X
X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, fresh_var Vs \<mapsto> lcl s ! length Vs]

goal (1 subgoal):
 1. X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]
[PROOF STEP]
using \<open>length Vs < length (lcl s)\<close>
[PROOF STATE]
proof (prove)
using this:
X(fresh_var Vs := None) = X
X(fresh_var Vs := None) \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s, fresh_var Vs \<mapsto> lcl s ! length Vs]
length Vs < length (lcl s)

goal (1 subgoal):
 1. X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
note IH[of "Vs@[fresh_var Vs]" E X] bisim E2 \<open>fv E2 \<subseteq> set Vs\<close> \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
    \<open>length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)\<close> \<open>\<D> E2 \<lfloor>dom X\<rfloor>\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>bisim (Vs @ [fresh_var Vs]) E e (lcl s); fv E \<subseteq> set (Vs @ [fresh_var Vs]); X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]; length (Vs @ [fresh_var Vs]) + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
E2 = insync(a) E
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]
\<lbrakk>bisim (Vs @ [fresh_var Vs]) E e (lcl s); fv E \<subseteq> set (Vs @ [fresh_var Vs]); X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]; length (Vs @ [fresh_var Vs]) + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
E2 = insync(a) E
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>
[PROOF STEP]
obtain TA' e2' x' where IH': "sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'"
    "bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s')" "x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]
\<lbrakk>bisim (Vs @ [fresh_var Vs]) E e (lcl s); fv E \<subseteq> set (Vs @ [fresh_var Vs]); X \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s]; length (Vs @ [fresh_var Vs]) + max_vars e \<le> length (lcl s); \<D> E \<lfloor>dom X\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' E (hp s) X taa e2' (hp s') x' \<and> bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
E2 = insync(a) E
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) e) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (1 subgoal):
 1. (\<And>TA' e2' x'. \<lbrakk>sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'; bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s'); x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
hence "dom x' \<subseteq> dom X \<union> fv E"
[PROOF STATE]
proof (prove)
using this:
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']

goal (1 subgoal):
 1. dom x' \<subseteq> dom X \<union> fv E
[PROOF STEP]
by(fastforce iff del: domIff simp add: sim_move10_def dest: red_dom_lcl \<tau>red0r_dom_lcl[OF wf_prog_wwf_prog[OF wf]] \<tau>red0t_dom_lcl[OF wf_prog_wwf_prog[OF wf]] \<tau>red0r_fv_subset[OF wf_prog_wwf_prog[OF wf]] split: if_split_asm)
[PROOF STATE]
proof (state)
this:
dom x' \<subseteq> dom X \<union> fv E

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
with fv \<open>X (fresh_var Vs) = None\<close>
[PROOF STATE]
proof (chain)
picking this:
fresh_var Vs \<notin> fv E
X (fresh_var Vs) = None
dom x' \<subseteq> dom X \<union> fv E
[PROOF STEP]
have "(fresh_var Vs) \<notin> dom x'"
[PROOF STATE]
proof (prove)
using this:
fresh_var Vs \<notin> fv E
X (fresh_var Vs) = None
dom x' \<subseteq> dom X \<union> fv E

goal (1 subgoal):
 1. fresh_var Vs \<notin> dom x'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fresh_var Vs \<notin> dom x'

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
hence "x' (fresh_var Vs) = None"
[PROOF STATE]
proof (prove)
using this:
fresh_var Vs \<notin> dom x'

goal (1 subgoal):
 1. x' (fresh_var Vs) = None
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x' (fresh_var Vs) = None

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x' (fresh_var Vs) = None

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
from \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
[PROOF STEP]
have "length (lcl s) = length (lcl s')"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>

goal (1 subgoal):
 1. length (lcl s) = length (lcl s')
[PROOF STEP]
by(auto dest: red1_preserves_len)
[PROOF STATE]
proof (state)
this:
length (lcl s) = length (lcl s')

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
length (lcl s) = length (lcl s')

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
note \<open>x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']\<close> \<open>length Vs < length (lcl s)\<close>
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
length Vs < length (lcl s)

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
x' (fresh_var Vs) = None
length (lcl s) = length (lcl s')
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
length Vs < length (lcl s)
[PROOF STEP]
have "x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']"
[PROOF STATE]
proof (prove)
using this:
x' (fresh_var Vs) = None
length (lcl s) = length (lcl s')
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
length Vs < length (lcl s)

goal (1 subgoal):
 1. x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(auto simp add: map_le_def dest: bspec)
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
from bisim fv
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
fresh_var Vs \<notin> fv E
[PROOF STEP]
have "unmod e (length Vs)"
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [fresh_var Vs]) E e (lcl s)
fresh_var Vs \<notin> fv E

goal (1 subgoal):
 1. unmod e (length Vs)
[PROOF STEP]
by(auto intro: bisim_fv_unmod)
[PROOF STATE]
proof (state)
this:
unmod e (length Vs)

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
with \<open>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close> \<open>length Vs < length (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
length Vs < length (lcl s)
unmod e (length Vs)
[PROOF STEP]
have "lcl s ! length Vs = lcl s' ! length Vs"
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
length Vs < length (lcl s)
unmod e (length Vs)

goal (1 subgoal):
 1. lcl s ! length Vs = lcl s' ! length Vs
[PROOF STEP]
by(auto dest!: red1_preserves_unmod)
[PROOF STATE]
proof (state)
this:
lcl s ! length Vs = lcl s' ! length Vs

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
with xsa
[PROOF STATE]
proof (chain)
picking this:
lcl s ! length Vs = Addr a
lcl s ! length Vs = lcl s' ! length Vs
[PROOF STEP]
have "lcl s' ! length Vs = Addr a"
[PROOF STATE]
proof (prove)
using this:
lcl s ! length Vs = Addr a
lcl s ! length Vs = lcl s' ! length Vs

goal (1 subgoal):
 1. lcl s' ! length Vs = Addr a
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
lcl s' ! length Vs = Addr a

goal (78 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 78 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
lcl s' ! length Vs = Addr a
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
lcl s' ! length Vs = Addr a

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (insync\<^bsub>V\<^esub> (a) e) (insync\<^bsub>V\<^esub> (a) e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (insync\<^bsub>V\<^esub> (a) e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
using IH' E2
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
lcl s' ! length Vs = Addr a
sim_move10 P t ta e e' E (hp s) X TA' e2' (hp s') x'
bisim (Vs @ [fresh_var Vs]) e2' e' (lcl s')
x' \<subseteq>\<^sub>m [Vs @ [fresh_var Vs] [\<mapsto>] lcl s']
E2 = insync(a) E

goal (1 subgoal):
 1. \<exists>taa e2' x'. sim_move10 P t ta (insync\<^bsub>V\<^esub> (a) e) (insync\<^bsub>V\<^esub> (a) e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (insync\<^bsub>V\<^esub> (a) e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']
[PROOF STEP]
by(auto intro: SynchronizedRed2)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' x'. sim_move10 P t ta (insync\<^bsub>V\<^esub> (a) e) (insync\<^bsub>V\<^esub> (a) e') E2 (hp s) X taa e2' (hp s') x' \<and> bisim Vs e2' (insync\<^bsub>V\<^esub> (a) e') (lcl s') \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s']

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
case (Unlock1Synchronized xs V a' a v h Vs E2 X)
[PROOF STATE]
proof (state)
this:
xs ! V = Addr a'
V < length xs
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) Val v) \<le> length (lcl (h, xs))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))
[PROOF STEP]
have E2: "E2 = insync(a) Val v" "V = length Vs" "xs ! length Vs = Addr a"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))

goal (1 subgoal):
 1. E2 = insync(a) Val v &&& V = length Vs &&& xs ! length Vs = Addr a
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
with \<open>xs ! V = Addr a'\<close>
[PROOF STATE]
proof (chain)
picking this:
xs ! V = Addr a'
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a
[PROOF STEP]
have [simp]: "a' = a"
[PROOF STATE]
proof (prove)
using this:
xs ! V = Addr a'
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a

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

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
have "extTA2J0 P,P,t \<turnstile> \<langle>insync(a) (Val v), (h, X)\<rangle> -\<lbrace>Unlock\<rightarrow>a, SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v, (h, X)\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. extTA2J0 P,P,t \<turnstile> \<langle>insync(a) Val v,(h, X)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(h, X)\<rangle>
[PROOF STEP]
by(rule UnlockSynchronized)
[PROOF STATE]
proof (state)
this:
extTA2J0 P,P,t \<turnstile> \<langle>insync(a) Val v,(h, X)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(h, X)\<rangle>

goal (77 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 77 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a
extTA2J0 P,P,t \<turnstile> \<langle>insync(a) Val v,(h, X)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(h, X)\<rangle>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a
extTA2J0 P,P,t \<turnstile> \<langle>insync(a) Val v,(h, X)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(h, X)\<rangle>

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>(Unlock, a'), SyncUnlock a'\<rbrace> (insync\<^bsub>V\<^esub> (a) Val v) (Val v) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Val v) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
[PROOF STEP]
using \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]\<close>
[PROOF STATE]
proof (prove)
using this:
E2 = insync(a) Val v
V = length Vs
xs ! length Vs = Addr a
extTA2J0 P,P,t \<turnstile> \<langle>insync(a) Val v,(h, X)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(h, X)\<rangle>
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>(Unlock, a'), SyncUnlock a'\<rbrace> (insync\<^bsub>V\<^esub> (a) Val v) (Val v) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Val v) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
[PROOF STEP]
by(fastforce intro: sim_move10_SyncLocks)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>(Unlock, a'), SyncUnlock a'\<rbrace> (insync\<^bsub>V\<^esub> (a) Val v) (Val v) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Val v) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]

goal (76 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 76 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (76 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 76 subgoals...
[PROOF STEP]
case (Unlock1SynchronizedNull xs V a v h Vs E2 X)
[PROOF STATE]
proof (state)
this:
xs ! V = Null
V < length xs
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a) Val v) \<le> length (lcl (h, xs))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (76 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 76 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))
[PROOF STEP]
have "V = length Vs" "xs ! length Vs = Addr a"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (insync\<^bsub>V\<^esub> (a) Val v) (lcl (h, xs))

goal (1 subgoal):
 1. V = length Vs &&& xs ! length Vs = Addr a
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
V = length Vs
xs ! length Vs = Addr a

goal (76 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 76 subgoals...
[PROOF STEP]
with \<open>xs ! V = Null\<close>
[PROOF STATE]
proof (chain)
picking this:
xs ! V = Null
V = length Vs
xs ! length Vs = Addr a
[PROOF STEP]
have False
[PROOF STATE]
proof (prove)
using this:
xs ! V = Null
V = length Vs
xs ! length Vs = Addr a

goal (1 subgoal):
 1. False
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
False

goal (76 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 76 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
False

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (insync\<^bsub>V\<^esub> (a) Val v) (Throw (addr_of_sys_xcpt NullPointer)) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Throw (addr_of_sys_xcpt NullPointer)) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (insync\<^bsub>V\<^esub> (a) Val v) (Throw (addr_of_sys_xcpt NullPointer)) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Throw (addr_of_sys_xcpt NullPointer)) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]

goal (75 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 75 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (75 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 75 subgoals...
[PROOF STEP]
case (Unlock1SynchronizedFail xs V A' a' v h Vs E2 X)
[PROOF STATE]
proof (state)
this:
False
xs ! V = Addr A'
V < length xs
bisim Vs E2 (insync\<^bsub>V\<^esub> (a') Val v) (lcl (h, xs))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
length Vs + max_vars (insync\<^bsub>V\<^esub> (a') Val v) \<le> length (lcl (h, xs))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (75 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 75 subgoals...
[PROOF STEP]
from \<open>False\<close>
[PROOF STATE]
proof (chain)
picking this:
False
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
False

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>(UnlockFail, A')\<rbrace> (insync\<^bsub>V\<^esub> (a') Val v) (Throw (addr_of_sys_xcpt IllegalMonitorState)) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Throw (addr_of_sys_xcpt IllegalMonitorState)) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>(UnlockFail, A')\<rbrace> (insync\<^bsub>V\<^esub> (a') Val v) (Throw (addr_of_sys_xcpt IllegalMonitorState)) E2 (hp (h, xs)) X ta e2' (hp (h, xs)) x' \<and> bisim Vs e2' (Throw (addr_of_sys_xcpt IllegalMonitorState)) (lcl (h, xs)) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, xs)]

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
case (Red1While b c s Vs E2 X)
[PROOF STATE]
proof (state)
this:
bisim Vs E2 (while (b) c) (lcl s)
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
length Vs + max_vars (while (b) c) \<le> length (lcl s)
\<D> E2 \<lfloor>dom X\<rfloor>

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (while (b) c) (lcl s)\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (while (b) c) (lcl s)
[PROOF STEP]
obtain B C
    where E2: "E2 = while (B) C" "b = compE1 Vs B" "c = compE1 Vs C"
    and sync: "\<not> contains_insync B" "\<not> contains_insync C"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (while (b) c) (lcl s)

goal (1 subgoal):
 1. (\<And>B C. \<lbrakk>E2 = while (B) C; b = compE1 Vs B; c = compE1 Vs C; \<not> contains_insync B; \<not> contains_insync C\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
have "extTA2J0 P,P,t \<turnstile> \<langle>while (B) C, (hp s, X)\<rangle> -\<epsilon>\<rightarrow> \<langle>if (B) (C;;while (B) C) else unit, (hp s, X)\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. extTA2J0 P,P,t \<turnstile> \<langle>while (B) C,(hp s, X)\<rangle> -\<lbrace>\<rbrace>\<rightarrow> \<langle>if (B) (C;; while (B) C) else unit,(hp s, X)\<rangle>
[PROOF STEP]
by(rule RedWhile)
[PROOF STATE]
proof (state)
this:
extTA2J0 P,P,t \<turnstile> \<langle>while (B) C,(hp s, X)\<rangle> -\<lbrace>\<rbrace>\<rightarrow> \<langle>if (B) (C;; while (B) C) else unit,(hp s, X)\<rangle>

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
hence "sim_move10 P t \<epsilon> (while (compE1 Vs B) (compE1 Vs C)) (if (compE1 Vs B) (compE1 Vs C;;while (compE1 Vs B) (compE1 Vs C)) else unit) (while (B) C) (hp s) X \<epsilon> (if (B) (C;;while (B) C) else unit) (hp s) X"
[PROOF STATE]
proof (prove)
using this:
extTA2J0 P,P,t \<turnstile> \<langle>while (B) C,(hp s, X)\<rangle> -\<lbrace>\<rbrace>\<rightarrow> \<langle>if (B) (C;; while (B) C) else unit,(hp s, X)\<rangle>

goal (1 subgoal):
 1. sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X
[PROOF STEP]
by(auto simp add: sim_move10_def)
[PROOF STATE]
proof (state)
this:
sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
from \<open>fv E2 \<subseteq> set Vs\<close> E2 sync
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C
[PROOF STEP]
have "bisim Vs (if (B) (C;; while (B) C) else unit)
                 (if (compE1 Vs B) (compE1 Vs (C;; while(B) C)) else (compE1 Vs unit)) (lcl s)"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C

goal (1 subgoal):
 1. bisim Vs (if (B) (C;; while (B) C) else unit) (if (compE1 Vs B) compE1 Vs (C;; while (B) C) else compE1 Vs unit) (lcl s)
[PROOF STEP]
by -(rule bisimCond, auto)
[PROOF STATE]
proof (state)
this:
bisim Vs (if (B) (C;; while (B) C) else unit) (if (compE1 Vs B) compE1 Vs (C;; while (B) C) else compE1 Vs unit) (lcl s)

goal (74 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 74 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C
sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X
bisim Vs (if (B) (C;; while (B) C) else unit) (if (compE1 Vs B) compE1 Vs (C;; while (B) C) else compE1 Vs unit) (lcl s)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C
sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X
bisim Vs (if (B) (C;; while (B) C) else unit) (if (compE1 Vs B) compE1 Vs (C;; while (B) C) else compE1 Vs unit) (lcl s)

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (while (b) c) (if (b) (c;; while (b) c) else unit) E2 (hp s) X ta e2' (hp s) x' \<and> bisim Vs e2' (if (b) (c;; while (b) c) else unit) (lcl s) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
[PROOF STEP]
using \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]\<close>
[PROOF STATE]
proof (prove)
using this:
E2 = while (B) C
b = compE1 Vs B
c = compE1 Vs C
\<not> contains_insync B
\<not> contains_insync C
sim_move10 P t \<lbrace>\<rbrace> (while (compE1 Vs B) compE1 Vs C) (if (compE1 Vs B) (compE1 Vs C;; while (compE1 Vs B) compE1 Vs C) else unit) (while (B) C) (hp s) X \<lbrace>\<rbrace> (if (B) (C;; while (B) C) else unit) (hp s) X
bisim Vs (if (B) (C;; while (B) C) else unit) (if (compE1 Vs B) compE1 Vs (C;; while (B) C) else compE1 Vs unit) (lcl s)
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]

goal (1 subgoal):
 1. \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (while (b) c) (if (b) (c;; while (b) c) else unit) E2 (hp s) X ta e2' (hp s) x' \<and> bisim Vs e2' (if (b) (c;; while (b) c) else unit) (lcl s) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]
[PROOF STEP]
by(simp)(rule exI, rule exI, rule exI, erule conjI, auto)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (while (b) c) (if (b) (c;; while (b) c) else unit) E2 (hp s) X ta e2' (hp s) x' \<and> bisim Vs e2' (if (b) (c;; while (b) c) else unit) (lcl s) \<and> x' \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl s]

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
case (Red1TryCatch h a D C V x e2 Vs E2 X)
[PROOF STATE]
proof (state)
this:
typeof_addr h a = \<lfloor>Class_type D\<rfloor>
compP1 P \<turnstile> D \<preceq>\<^sup>* C
V < length x
bisim Vs E2 (try Throw a catch(C V) e2) (lcl (h, x))
fv E2 \<subseteq> set Vs
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))
\<D> E2 \<lfloor>dom X\<rfloor>

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
from \<open>bisim Vs E2 (try Throw a catch(C V) e2) (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs E2 (try Throw a catch(C V) e2) (lcl (h, x))
[PROOF STEP]
obtain E2' V' where "E2 = try Throw a catch(C V') E2'" "V = length Vs" "e2 = compE1 (Vs @ [V']) E2'"
    and sync: "\<not> contains_insync E2'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs E2 (try Throw a catch(C V) e2) (lcl (h, x))

goal (1 subgoal):
 1. (\<And>V' E2'. \<lbrakk>E2 = try Throw a catch(C V') E2'; V = length Vs; e2 = compE1 (Vs @ [V']) E2'; \<not> contains_insync E2'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
E2 = try Throw a catch(C V') E2'
V = length Vs
e2 = compE1 (Vs @ [V']) E2'
\<not> contains_insync E2'

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
with \<open>fv E2 \<subseteq> set Vs\<close>
[PROOF STATE]
proof (chain)
picking this:
fv E2 \<subseteq> set Vs
E2 = try Throw a catch(C V') E2'
V = length Vs
e2 = compE1 (Vs @ [V']) E2'
\<not> contains_insync E2'
[PROOF STEP]
have "fv E2' \<subseteq> set (Vs @[V'])"
[PROOF STATE]
proof (prove)
using this:
fv E2 \<subseteq> set Vs
E2 = try Throw a catch(C V') E2'
V = length Vs
e2 = compE1 (Vs @ [V']) E2'
\<not> contains_insync E2'

goal (1 subgoal):
 1. fv E2' \<subseteq> set (Vs @ [V'])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fv E2' \<subseteq> set (Vs @ [V'])

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
with \<open>e2 = compE1 (Vs @ [V']) E2'\<close>  sync
[PROOF STATE]
proof (chain)
picking this:
e2 = compE1 (Vs @ [V']) E2'
\<not> contains_insync E2'
fv E2' \<subseteq> set (Vs @ [V'])
[PROOF STEP]
have "bisim (Vs @[V']) E2' e2 (x[V := Addr a])"
[PROOF STATE]
proof (prove)
using this:
e2 = compE1 (Vs @ [V']) E2'
\<not> contains_insync E2'
fv E2' \<subseteq> set (Vs @ [V'])

goal (1 subgoal):
 1. bisim (Vs @ [V']) E2' e2 (x[V := Addr a])
[PROOF STEP]
by(auto intro!: compE1_bisim)
[PROOF STATE]
proof (state)
this:
bisim (Vs @ [V']) E2' e2 (x[V := Addr a])

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
with \<open>V = length Vs\<close> \<open>length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
V = length Vs
length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))
bisim (Vs @ [V']) E2' e2 (x[V := Addr a])
[PROOF STEP]
have "bisim Vs {V':Class C=\<lfloor>Addr a\<rfloor>; E2'} {length Vs:Class C=None; e2} (x[V := Addr a])"
[PROOF STATE]
proof (prove)
using this:
V = length Vs
length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))
bisim (Vs @ [V']) E2' e2 (x[V := Addr a])

goal (1 subgoal):
 1. bisim Vs {V':Class C=\<lfloor>Addr a\<rfloor>; E2'} {length Vs:Class C=None; e2} (x[V := Addr a])
[PROOF STEP]
by(auto intro: bisimBlockSomeNone)
[PROOF STATE]
proof (state)
this:
bisim Vs {V':Class C=\<lfloor>Addr a\<rfloor>; E2'} {length Vs:Class C=None; e2} (x[V := Addr a])

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
bisim Vs {V':Class C=\<lfloor>Addr a\<rfloor>; E2'} {length Vs:Class C=None; e2} (x[V := Addr a])

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
from \<open>length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))
[PROOF STEP]
have "[Vs [\<mapsto>] x[length Vs := Addr a]] = [Vs [\<mapsto>] x]"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars (try Throw a catch(C V) e2) \<le> length (lcl (h, x))

goal (1 subgoal):
 1. [Vs [\<mapsto>] x[length Vs := Addr a]] = [Vs [\<mapsto>] x]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
[Vs [\<mapsto>] x[length Vs := Addr a]] = [Vs [\<mapsto>] x]

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
with \<open>X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]\<close>
[PROOF STATE]
proof (chain)
picking this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
[Vs [\<mapsto>] x[length Vs := Addr a]] = [Vs [\<mapsto>] x]
[PROOF STEP]
have "X \<subseteq>\<^sub>m [Vs [\<mapsto>] x[length Vs := Addr a]]"
[PROOF STATE]
proof (prove)
using this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] lcl (h, x)]
[Vs [\<mapsto>] x[length Vs := Addr a]] = [Vs [\<mapsto>] x]

goal (1 subgoal):
 1. X \<subseteq>\<^sub>m [Vs [\<mapsto>] x[length Vs := Addr a]]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] x[length Vs := Addr a]]

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
X \<subseteq>\<^sub>m [Vs [\<mapsto>] x[length Vs := Addr a]]

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Val v) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Val v) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 9. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T (Val v)) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast T (Val v)) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (Cast T (Val v)) (Throw (addr_of_sys_xcpt ClassCast)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt ClassCast)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 10. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (e instanceof T) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (e instanceof T) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (e instanceof T) (e' instanceof T) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (e' instanceof T) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
A total of 73 subgoals...
[PROOF STEP]
note \<open>e2 = compE1 (Vs @ [V']) E2'\<close> \<open>E2 = try Throw a catch(C V') E2'\<close>
    \<open>typeof_addr h a = \<lfloor>Class_type D\<rfloor>\<close> \<open>compP1 P \<turnstile> D \<preceq>\<^sup>* C\<close> \<open>V = length Vs\<close>
[PROOF STATE]
proof (state)
this:
e2 = compE1 (Vs @ [V']) E2'
E2 = try Throw a catch(C V') E2'
typeof_addr h a = \<lfloor>Class_type D\<rfloor>
compP1 P \<turnstile> D \<preceq>\<^sup>* C
V = length Vs

goal (73 subgoals):
 1. \<And>h' a h C l vs e2 x. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 2. \<And>h C l vs e2 x. \<lbrakk>allocate h (Class_type C) = {}; bisim vs e2 (new C) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (new C) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (new C) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 3. \<And>e s ta e' s' T vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (newA T\<lfloor>e\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (newA T\<lfloor>e\<rceil>) (newA T\<lfloor>e'\<rceil>) e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (newA T\<lfloor>e'\<rceil>) (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 4. \<And>i h' a h T l vs e2 x. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (addr a) e2 (hp (h, l)) x ta e2' (hp (h', l)) x' \<and> bisim vs e2' (addr a) (lcl (h', l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h', l)]
 5. \<And>i T s vs e2 x. \<lbrakk>i <s 0; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt NegativeArraySize)) e2 (hp s) x ta e2' (hp s) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt NegativeArraySize)) (lcl s) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]
 6. \<And>i h T l vs e2 x. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs e2 (newA T\<lfloor>Val (Intg i)\<rceil>) (lcl (h, l)); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length (lcl (h, l)); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' x'. sim_move10 P t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) (Throw (addr_of_sys_xcpt OutOfMemory)) e2 (hp (h, l)) x ta e2' (hp (h, l)) x' \<and> bisim vs e2' (Throw (addr_of_sys_xcpt OutOfMemory)) (lcl (h, l)) \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl (h, l)]
 7. \<And>e s ta e' s' C vs e2 x. \<lbrakk>False,compP1 P,t \<turnstile>1 \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 x. \<lbrakk>bisim vs e2 e (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars e \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta e e' e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' e' (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']; bisim vs e2 (Cast C e) (lcl s); fv e2 \<subseteq> set vs; x \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s]; length vs + max_vars (Cast C e) \<le> length (lcl s); \<D> e2 \<lfloor>dom x\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>taa e2' x'. sim_move10 P t ta (Cast C e) (Cast C e') e2 (hp s) x taa e2' (hp s') x' \<and> bisim vs e2' (Cast C e') (lcl s') \<and> x' \<subseteq>\<^sub>m [vs [\<mapsto>] lcl s']
 8. \<And>s v U T vs e2 x. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; compP1 P \<turnstile> U \<le> T; bisim vs e2 (Cast T
[cell cut: 2390012 characters, first 2000000 kept]