[STATEMENT]
lemma assumes wf: "wf_J_prog P"
  shows red1_simulates_red_aux:
  "\<lbrakk> extTA2J0 P,P,t \<turnstile> \<langle>e1, S\<rangle> -TA\<rightarrow> \<langle>e1', S'\<rangle>; bisim vs e1 e2 XS; fv e1 \<subseteq> set vs;
     lcl S \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e1 \<le> length XS;
     \<forall>aMvs. call e1 = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp S) aMvs \<rbrakk>
  \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t TA e1 e2 (hp S) XS ta e2' (hp S') XS' \<and> bisim vs e1' e2' XS' \<and> lcl S' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']"
  (is "\<lbrakk> _; _; _; _; _; ?synth e1 S \<rbrakk> \<Longrightarrow> ?concl e1 e2 S XS e1' S' TA vs")

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e \<guillemotleft>bop\<guillemotright> e2) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e' \<guillemotleft>bop\<guillemotright> e2) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(cases "is_val e'")(fastforce elim!: sim_move01_expr)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e \<guillemotleft>bop\<guillemotright> e2) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e' \<guillemotleft>bop\<guillemotright> e2) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>E2 = Val v \<guillemotleft>bop\<guillemotright> E; bisim Vs e E xs\<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 xs

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val v \<guillemotleft>bop\<guillemotright> e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!: sim_move01_expr)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val v \<guillemotleft>bop\<guillemotright> e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val v \<guillemotleft>bop\<guillemotright> e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Var V_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Val v_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce simp add: index_less_aux map_le_def fun_upds_apply intro!: exI dest: bspec)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Var V_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Val v_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (V_:=Val v_) e2 (hp (h_, l_)) XS ta e2' (hp (h_, l_(V_ \<mapsto> v_))) XS' \<and> bisim vs unit e2' XS' \<and> lcl (h_, l_(V_ \<mapsto> v_)) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce intro: index_less_aux LAss_lem intro!: exI simp del: fun_upd_apply)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (V_:=Val v_) e2 (hp (h_, l_)) XS ta e2' (hp (h_, l_(V_ \<mapsto> v_))) XS' \<and> bisim vs unit e2' XS' \<and> lcl (h_, l_(V_ \<mapsto> v_)) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil>) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(cases "is_val a'")(fastforce elim!: sim_move01_expr)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil>) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val a\<lfloor>i\<rceil>) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val a\<lfloor>i'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!: sim_move01_expr)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val a\<lfloor>i\<rceil>) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val a\<lfloor>i'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 92 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (92 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 92 subgoals...
[PROOF STEP]
case RedAAcc
[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 (addr a_\<lfloor>Val (Intg i_)\<rceil>) e2 XS
fv (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<subseteq> set vs
lcl (h_, l_) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<le> length XS
\<forall>aMvs. call (addr a_\<lfloor>Val (Intg i_)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h_, l_)) aMvs

goal (92 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 92 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 (addr a_\<lfloor>Val (Intg i_)\<rceil>) e2 XS
fv (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<subseteq> set vs
lcl (h_, l_) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil>) \<le> length XS
\<forall>aMvs. call (addr a_\<lfloor>Val (Intg i_)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h_, l_)) aMvs

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

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

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

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

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

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

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

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

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

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

goal (2 subgoals):
 1. is_val a' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil> := e) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<not> is_val a' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil> := e) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with IH' E2 True sync  \<open>\<not> is_val a\<close> \<open>extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta a E (hp s) xs ta' e2' (hp s') xs'
bisim Vs a' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<lfloor>compE1 Vs i\<rceil> := compE1 Vs e
is_val a'
\<not> contains_insync i
\<not> contains_insync e
\<not> is_val a
extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
bisim Vs i (compE1 Vs i) xs'
bisim Vs e (compE1 Vs e) xs'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta a E (hp s) xs ta' e2' (hp s') xs'
bisim Vs a' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<lfloor>compE1 Vs i\<rceil> := compE1 Vs e
is_val a'
\<not> contains_insync i
\<not> contains_insync e
\<not> is_val a
extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
bisim Vs i (compE1 Vs i) xs'
bisim Vs e (compE1 Vs e) xs'

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

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

goal (1 subgoal):
 1. \<not> is_val a' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil> := e) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with IH' E2 sync \<open>\<not> is_val a\<close> \<open>extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta a E (hp s) xs ta' e2' (hp s') xs'
bisim Vs a' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<lfloor>compE1 Vs i\<rceil> := compE1 Vs e
\<not> contains_insync i
\<not> contains_insync e
\<not> is_val a
extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
\<not> is_val a'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta a E (hp s) xs ta' e2' (hp s') xs'
bisim Vs a' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<lfloor>compE1 Vs i\<rceil> := compE1 Vs e
\<not> contains_insync i
\<not> contains_insync e
\<not> is_val a
extTA2J0 P,P,t \<turnstile> \<langle>a,s\<rangle> -ta\<rightarrow> \<langle>a',s'\<rangle>
\<not> is_val a'

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil> := e) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!: sim_move01_expr)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (a\<lfloor>i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (a'\<lfloor>i\<rceil> := e) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val a\<lfloor>Val i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val a\<lfloor>Val i\<rceil> := e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!: sim_move01_expr)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val a\<lfloor>Val i\<rceil> := e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val a\<lfloor>Val i\<rceil> := e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

goal (88 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 88 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> P \<turnstile> U_ \<le> T_
bisim vs (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) e2 XS
fv (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<subseteq> set vs
lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS]
length vs + max_vars (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) \<le> length XS
\<forall>aMvs. call (addr a_\<lfloor>Val (Intg i_)\<rceil> := Val w_) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s_) aMvs

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

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>F{D} := e2) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>F{D} := e2) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(cases "is_val e'")(fastforce elim!: sim_move01_expr)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>F{D} := e2) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>F{D} := e2) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

goal (2 subgoals):
 1. is_val e' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<not> is_val e' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with IH' E2 True sync  \<open>\<not> is_val e\<close> \<open>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta e E (hp s) xs ta' e2' (hp s') xs'
bisim Vs e' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, compE1 Vs e2, compE1 Vs e3)
is_val e'
\<not> contains_insync e2
\<not> contains_insync e3
\<not> is_val e
extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
bisim Vs e2 (compE1 Vs e2) xs'
bisim Vs e3 (compE1 Vs e3) xs'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta e E (hp s) xs ta' e2' (hp s') xs'
bisim Vs e' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, compE1 Vs e2, compE1 Vs e3)
is_val e'
\<not> contains_insync e2
\<not> contains_insync e3
\<not> is_val e
extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
bisim Vs e2 (compE1 Vs e2) xs'
bisim Vs e3 (compE1 Vs e3) xs'

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

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

goal (1 subgoal):
 1. \<not> is_val e' \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with IH' E2 sync \<open>\<not> is_val e\<close> \<open>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta e E (hp s) xs ta' e2' (hp s') xs'
bisim Vs e' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, compE1 Vs e2, compE1 Vs e3)
\<not> contains_insync e2
\<not> contains_insync e3
\<not> is_val e
extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<not> is_val e'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta e E (hp s) xs ta' e2' (hp s') xs'
bisim Vs e' e2' xs'
lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
E2 = E\<bullet>compareAndSwap(D\<bullet>F, compE1 Vs e2, compE1 Vs e3)
\<not> contains_insync e2
\<not> contains_insync e3
\<not> is_val e
extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>
\<not> is_val e'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>M(es)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>M(es)) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(cases "is_val e'")(fastforce elim!: sim_move01_expr split: if_split_asm)+
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e\<bullet>M(es)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (e'\<bullet>M(es)) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<forall>aMvs. calls es = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
\<forall>aMvs. calls es = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val v\<bullet>M(es)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val v\<bullet>M(es')) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!: sim_move01_CallParams)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Val v\<bullet>M(es)) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (Val v\<bullet>M(es')) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

goal (1 subgoal):
 1. synthesized_call P (hp s) (a, M, vs)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
synthesized_call P (hp s) (a, M, vs)

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

goal (1 subgoal):
 1. False
[PROOF STEP]
by(auto simp add: synthesized_call_conv dest: sees_method_fun)
[PROOF STATE]
proof (state)
this:
False

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (addr a\<bullet>M(map Val vs)) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (blocks (this # pns) (Class D # Ts) (Addr a # vs) body) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (addr a\<bullet>M(map Val vs)) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (blocks (this # pns) (Class D # Ts) (Addr a # vs) body) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<tau>external_defs D M \<Longrightarrow> h' = hp s \<and> ta = \<lbrace>\<rbrace>
[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> h' = hp s \<and> ta = \<lbrace>\<rbrace>

goal (79 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 79 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
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
ta' = extTA2J0 P ta
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
\<tau>external_defs D M \<Longrightarrow> h' = hp s \<and> ta = \<lbrace>\<rbrace>
[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
typeof_addr (hp s) a = \<lfloor>T\<rfloor>
ta' = extTA2J0 P ta
e' = extRet2J (addr a\<bullet>M(map Val vs)) va
s' = (h', lcl s)
P,t \<turnstile> \<langle>a\<bullet>M(vs),hp s\<rangle> -ta\<rightarrow>ext \<langle>va,h'\<rangle>
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
ta_bisim01 (extTA2J0 P ta) (extTA2J1 (compP1 P) ta)
\<tau>external_defs D M \<Longrightarrow> h' = hp s \<and> ta = \<lbrace>\<rbrace>

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t ta' (addr a\<bullet>M(map Val vs)) E2 (hp s) xs ta e2' (hp s') XS' \<and> bisim Vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(cases va)(fastforce intro!: exI[where x=ta] intro: Red1CallExternal simp add: map_eq_append_conv sim_move01_def dest: sees_method_fun simp del: split_paired_Ex)+
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t ta' (addr a\<bullet>M(map Val vs)) E2 (hp s) xs ta e2' (hp s') XS' \<and> bisim Vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

goal (3 subgoals):
 1. \<And>e'a. \<lbrakk>vo = None; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 3. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with red IH[of "Vs@[V]" E' xs] fv \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close>
      \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close> \<open>?synth {V:T=vo; e} (h, x)\<close>
[PROOF STATE]
proof (chain)
picking this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' xs; fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs]; length (Vs @ [V]) + max_vars e \<le> length xs; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) xs taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = None
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs
[PROOF STEP]
obtain TA' e2' xs' where red': "sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'"
      and bisim': "bisim (Vs @ [V]) e' e2' xs'" "x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']"
[PROOF STATE]
proof (prove)
using this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' xs; fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs]; length (Vs @ [V]) + max_vars e \<le> length xs; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) xs taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = None
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs

goal (1 subgoal):
 1. (\<And>TA' e2' xs'. \<lbrakk>sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'; bisim (Vs @ [V]) e' e2' xs'; x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'
bisim (Vs @ [V]) e' e2' xs'
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']

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

goal (1 subgoal):
 1. length (Vs @ [V]) + max_vars e \<le> length xs'
[PROOF STEP]
by(fastforce simp add: sim_move01_def dest: red1_preserves_len \<tau>red1t_preserves_len \<tau>red1r_preserves_len split: if_split_asm)
[PROOF STATE]
proof (state)
this:
length (Vs @ [V]) + max_vars e \<le> length xs'

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

goal (1 subgoal):
 1. x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]

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

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

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

goal (3 subgoals):
 1. \<And>e'a. \<lbrakk>vo = None; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 3. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[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>e'a. \<lbrakk>vo = None; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 3. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with \<open>bisim (Vs @ [V]) e E' xs\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V]) e E' xs
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' xs
hidden (Vs @ [V]) (index Vs V)

goal (1 subgoal):
 1. unmod E' (index Vs V)
[PROOF STEP]
by -(rule hidden_bisim_unmod)
[PROOF STATE]
proof (state)
this:
unmod E' (index Vs V)

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

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

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

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

goal (1 subgoal):
 1. xs ! index Vs V = xs' ! index Vs V
[PROOF STEP]
using sim_move01_preserves_unmod[OF red']
[PROOF STATE]
proof (prove)
using this:
unmod E' (index Vs V)
index Vs V < length xs
\<lbrakk>unmod E' ?i; ?i < length xs\<rbrakk> \<Longrightarrow> xs' ! ?i = xs ! ?i

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

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

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

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

goal (1 subgoal):
 1. length xs = length xs'
[PROOF STEP]
by(rule sim_move01_preserves_len[symmetric])
[PROOF STATE]
proof (state)
this:
length xs = length xs'

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

goal (1 subgoal):
 1. x'(V := x V) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
[PROOF STEP]
using \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close> \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close>
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
V \<in> set Vs \<Longrightarrow> xs ! index Vs V = xs' ! index Vs V
length xs = length xs'
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce simp del: split_paired_Ex fun_upd_apply intro: rel)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

goal (1 subgoal):
 1. \<And>a. x' V = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. x' V = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[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' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
moreover
[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' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with \<open>x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']\<close>
[PROOF STATE]
proof (chain)
picking this:
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']
x' V = \<lfloor>v\<rfloor>
[PROOF STEP]
have "[Vs @ [V] [\<mapsto>] xs'] V = \<lfloor>v\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']
x' V = \<lfloor>v\<rfloor>

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

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

goal (1 subgoal):
 1. \<And>a. x' V = \<lfloor>a\<rfloor> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
from \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=vo; e} \<le> length xs
[PROOF STEP]
have "length Vs < length xs"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=vo; e} \<le> length xs

goal (1 subgoal):
 1. length Vs < length xs
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
length Vs < length xs

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

goal (1 subgoal):
 1. xs' ! length Vs = v
[PROOF STEP]
using \<open>length xs = length xs'\<close>
[PROOF STATE]
proof (prove)
using this:
x' V = \<lfloor>v\<rfloor>
[Vs @ [V] [\<mapsto>] xs'] V = \<lfloor>v\<rfloor>
length Vs < length xs
length xs = length xs'

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce simp del: fun_upd_apply intro: rel)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

goal (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with red IH[of "Vs@[V]" E' "xs[length Vs := v]"] fv \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close>
      \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close> \<open>?synth {V:T=vo; e} (h, x)\<close>
[PROOF STATE]
proof (chain)
picking this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' (xs[length Vs := v]); fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs[length Vs := v]]; length (Vs @ [V]) + max_vars e \<le> length (xs[length Vs := v]); \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) (xs[length Vs := v]) taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])
[PROOF STEP]
obtain TA' e2' xs' where red': "sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'"
      and bisim': "bisim (Vs @ [V]) e' e2' xs'" "x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']"
[PROOF STATE]
proof (prove)
using this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' (xs[length Vs := v]); fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs[length Vs := v]]; length (Vs @ [V]) + max_vars e \<le> length (xs[length Vs := v]); \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) (xs[length Vs := v]) taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])

goal (1 subgoal):
 1. (\<And>TA' e2' xs'. \<lbrakk>sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'; bisim (Vs @ [V]) e' e2' xs'; x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'
bisim (Vs @ [V]) e' e2' xs'
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']

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

goal (1 subgoal):
 1. length (Vs @ [V]) + max_vars e \<le> length xs'
[PROOF STEP]
by(auto dest: sim_move01_preserves_len)
[PROOF STATE]
proof (state)
this:
length (Vs @ [V]) + max_vars e \<le> length xs'

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

goal (1 subgoal):
 1. x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]

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

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

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

goal (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[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 (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with \<open>bisim (Vs @ [V]) e E' (xs[length Vs := v])\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V]) e E' (xs[length Vs := v])
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' (xs[length Vs := v])
hidden (Vs @ [V]) (index Vs V)

goal (1 subgoal):
 1. unmod E' (index Vs V)
[PROOF STEP]
by -(rule hidden_bisim_unmod)
[PROOF STATE]
proof (state)
this:
unmod E' (index Vs V)

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

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

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

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

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

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

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

goal (1 subgoal):
 1. xs ! index Vs V = xs' ! index Vs V
[PROOF STEP]
using sim_move01_preserves_unmod[OF red', of "index Vs V"]
[PROOF STATE]
proof (prove)
using this:
unmod E' (index Vs V)
index Vs V < length xs
xs[length Vs := v] ! index Vs V = xs ! index Vs V
\<lbrakk>unmod E' (index Vs V); index Vs V < length (xs[length Vs := v])\<rbrakk> \<Longrightarrow> xs' ! index Vs V = xs[length Vs := v] ! index Vs V

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

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

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

goal (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
from red'
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'
[PROOF STEP]
have "length xs = length xs'"
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'

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

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

goal (1 subgoal):
 1. x'(V := x V) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
[PROOF STEP]
using \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close> \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close>
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
V \<in> set Vs \<Longrightarrow> xs ! index Vs V = xs' ! index Vs V
length xs = length xs'
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs

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

goal (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
from BlockSome red
[PROOF STATE]
proof (chain)
picking this:
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
[PROOF STEP]
obtain v' where Some: "x' V = \<lfloor>v'\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>

goal (1 subgoal):
 1. (\<And>v'. x' V = \<lfloor>v'\<rfloor> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto dest!: red_lcl_incr)
[PROOF STATE]
proof (state)
this:
x' V = \<lfloor>v'\<rfloor>

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

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

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

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

goal (1 subgoal):
 1. length Vs < length xs
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
length Vs < length xs

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

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

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

goal (2 subgoals):
 1. \<And>e'a v. \<lbrakk>vo = \<lfloor>v\<rfloor>; E2 = {length Vs:T=\<lfloor>v\<rfloor>; e'a}; bisim (Vs @ [V]) e e'a (xs[length Vs := v])\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with red' bisim' BlockSome Some \<open>length Vs < length xs\<close>
[PROOF STATE]
proof (chain)
picking this:
sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'
bisim (Vs @ [V]) e' e2' xs'
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])
x' V = \<lfloor>v'\<rfloor>
length Vs < length xs
xs' ! length Vs = v'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t ta e E' h (xs[length Vs := v]) TA' e2' h' xs'
bisim (Vs @ [V]) e' e2' xs'
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']
vo = \<lfloor>v\<rfloor>
E2 = {length Vs:T=\<lfloor>v\<rfloor>; E'}
bisim (Vs @ [V]) e E' (xs[length Vs := v])
x' V = \<lfloor>v'\<rfloor>
length Vs < length xs
xs' ! length Vs = v'

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce simp del: fun_upd_apply intro: rel)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

goal (1 subgoal):
 1. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with red IH[of "Vs@[V]" E' xs] fv \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close>
      \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close> \<open>?synth {V:T=vo; e} (h, x)\<close>
[PROOF STATE]
proof (chain)
picking this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' xs; fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs]; length (Vs @ [V]) + max_vars e \<le> length xs; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) xs taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = \<lfloor>xs ! length Vs\<rfloor>
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs
[PROOF STEP]
obtain TA' e2' xs' where red': "sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'"
      and IH': "bisim (Vs @ [V]) e' e2' xs'" "x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']"
[PROOF STATE]
proof (prove)
using this:
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
\<lbrakk>bisim (Vs @ [V]) e E' xs; fv e \<subseteq> set (Vs @ [V]); lcl (h, x(V := vo)) \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs]; length (Vs @ [V]) + max_vars e \<le> length xs; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x(V := vo))) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e E' (hp (h, x(V := vo))) xs taa e2' (hp (h', x')) XS' \<and> bisim (Vs @ [V]) e' e2' XS' \<and> lcl (h', x') \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] XS']
fv e \<subseteq> set (Vs @ [V])
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs
\<forall>aMvs. call {V:T=vo; e} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, x)) aMvs
vo = \<lfloor>xs ! length Vs\<rfloor>
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs

goal (1 subgoal):
 1. (\<And>TA' e2' xs'. \<lbrakk>sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'; bisim (Vs @ [V]) e' e2' xs'; x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t ta e E' h xs TA' e2' h' xs'
bisim (Vs @ [V]) e' e2' xs'
x' \<subseteq>\<^sub>m [Vs @ [V] [\<mapsto>] xs']

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

goal (1 subgoal):
 1. length (Vs @ [V]) + max_vars e \<le> length xs'
[PROOF STEP]
by(auto dest: sim_move01_preserves_len)
[PROOF STATE]
proof (state)
this:
length (Vs @ [V]) + max_vars e \<le> length xs'

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

goal (1 subgoal):
 1. x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]

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

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

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

goal (1 subgoal):
 1. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[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>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with \<open>bisim (Vs @ [V]) e E' xs\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim (Vs @ [V]) e E' xs
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' xs
hidden (Vs @ [V]) (index Vs V)

goal (1 subgoal):
 1. unmod E' (index Vs V)
[PROOF STEP]
by -(rule hidden_bisim_unmod)
[PROOF STATE]
proof (state)
this:
unmod E' (index Vs V)

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

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

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

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

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

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

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

goal (1 subgoal):
 1. xs ! index Vs V = xs' ! index Vs V
[PROOF STEP]
using sim_move01_preserves_unmod[OF red', of "index Vs V"]
[PROOF STATE]
proof (prove)
using this:
unmod E' (index Vs V)
index Vs V < length xs
xs[length Vs := v] ! index Vs V = xs ! index Vs V
\<lbrakk>unmod E' (index Vs V); index Vs V < length xs\<rbrakk> \<Longrightarrow> xs' ! index Vs V = xs ! index Vs V

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

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

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

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

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

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

goal (1 subgoal):
 1. x'(V := x V) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
[PROOF STEP]
using \<open>lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close> \<open>length Vs + max_vars {V:T=vo; e} \<le> length xs\<close>
[PROOF STATE]
proof (prove)
using this:
x' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs', V \<mapsto> xs' ! length Vs]
V \<in> set Vs \<Longrightarrow> xs ! index Vs V = xs' ! index Vs V
length xs = length xs'
lcl (h, x) \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; e} \<le> length xs

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

goal (1 subgoal):
 1. \<And>e'a. \<lbrakk>vo = \<lfloor>xs ! length Vs\<rfloor>; E2 = {length Vs:T=None; e'a}; bisim (Vs @ [V]) e e'a xs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
from BlockSomeNone red
[PROOF STATE]
proof (chain)
picking this:
vo = \<lfloor>xs ! length Vs\<rfloor>
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>
[PROOF STEP]
obtain v' where Some: "x' V = \<lfloor>v'\<rfloor>"
[PROOF STATE]
proof (prove)
using this:
vo = \<lfloor>xs ! length Vs\<rfloor>
E2 = {length Vs:T=None; E'}
bisim (Vs @ [V]) e E' xs
extTA2J0 P,P,t \<turnstile> \<langle>e,(h, x(V := vo))\<rangle> -ta\<rightarrow> \<langle>e',(h', x')\<rangle>

goal (1 subgoal):
 1. (\<And>v'. x' V = \<lfloor>v'\<rfloor> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto dest!: red_lcl_incr)
[PROOF STATE]
proof (state)
this:
x' V = \<lfloor>v'\<rfloor>

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

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

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

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

goal (1 subgoal):
 1. length Vs < length xs
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
length Vs < length xs

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce simp del: fun_upd_apply intro: rel)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta {V:T=vo; e} E2 (hp (h, x)) xs taa e2' (hp (h', x'(V := x V))) XS' \<and> bisim Vs {V:T=x' V; e'} e2' XS' \<and> lcl (h', x'(V := x V)) \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

goal (1 subgoal):
 1. (\<And>vo'. E2 = {length Vs:T=vo'; Val u} \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = {length Vs:T=vo'; Val u}

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
proof(cases vo)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = None\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>a. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = \<lfloor>a\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
case (Some v)
[PROOF STATE]
proof (state)
this:
vo = \<lfloor>v\<rfloor>

goal (2 subgoals):
 1. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = None\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>a. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = \<lfloor>a\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
with \<open>bisim Vs {V:T=vo; Val u} E2 xs\<close>
[PROOF STATE]
proof (chain)
picking this:
bisim Vs {V:T=vo; Val u} E2 xs
vo = \<lfloor>v\<rfloor>
[PROOF STEP]
have vo': "case vo' of None \<Rightarrow> xs ! length Vs = v | Some v' \<Rightarrow> v = v'"
[PROOF STATE]
proof (prove)
using this:
bisim Vs {V:T=vo; Val u} E2 xs
vo = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'

goal (2 subgoals):
 1. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = None\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>a. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = \<lfloor>a\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
have "sim_move01 (compP1 P) t \<epsilon> {V:T=vo; Val u} E2 (hp s) xs \<epsilon> (Val u) (hp s) (xs[length Vs := v])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
proof(cases vo')
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. vo' = None \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
 2. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
case None
[PROOF STATE]
proof (state)
this:
vo' = None

goal (2 subgoals):
 1. vo' = None \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
 2. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
with vo'
[PROOF STATE]
proof (chain)
picking this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
vo' = None
[PROOF STEP]
have "xs[length Vs := v] = xs"
[PROOF STATE]
proof (prove)
using this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
vo' = None

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

goal (2 subgoals):
 1. vo' = None \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
 2. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
xs[length Vs := v] = xs

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
using Some None
[PROOF STATE]
proof (prove)
using this:
xs[length Vs := v] = xs
vo = \<lfloor>v\<rfloor>
vo' = None

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])

goal (1 subgoal):
 1. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
case Some
[PROOF STATE]
proof (state)
this:
vo' = \<lfloor>a_\<rfloor>

goal (1 subgoal):
 1. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
from \<open>length Vs + max_vars {V:T=vo; Val u} \<le> length xs\<close>
[PROOF STATE]
proof (chain)
picking this:
length Vs + max_vars {V:T=vo; Val u} \<le> length xs
[PROOF STEP]
have "length Vs < length xs"
[PROOF STATE]
proof (prove)
using this:
length Vs + max_vars {V:T=vo; Val u} \<le> length xs

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

goal (1 subgoal):
 1. \<And>a. vo' = \<lfloor>a\<rfloor> \<Longrightarrow> sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
with vo' Some
[PROOF STATE]
proof (chain)
picking this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
vo' = \<lfloor>a_\<rfloor>
length Vs < length xs
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
vo' = \<lfloor>a_\<rfloor>
length Vs < length xs

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
using \<open>vo = Some v\<close>
[PROOF STATE]
proof (prove)
using this:
case vo' of None \<Rightarrow> xs ! length Vs = v | \<lfloor>v'\<rfloor> \<Rightarrow> v = v'
vo' = \<lfloor>a_\<rfloor>
length Vs < length xs
vo = \<lfloor>v\<rfloor>

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])

goal (2 subgoals):
 1. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = None\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
 2. \<And>a. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = \<lfloor>a\<rfloor>\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
using RedBlock
[PROOF STATE]
proof (prove)
using this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs \<lbrace>\<rbrace> (Val u) (hp s) (xs[length Vs := v])
bisim Vs {V:T=vo; Val u} E2 xs
fv {V:T=vo; Val u} \<subseteq> set Vs
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_vars {V:T=vo; Val u} \<le> length xs
\<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

goal (1 subgoal):
 1. \<lbrakk>bisim Vs {V:T=vo; Val u} E2 xs; fv {V:T=vo; Val u} \<subseteq> set Vs; lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]; length Vs + max_vars {V:T=vo; Val u} \<le> length xs; \<forall>aMvs. call {V:T=vo; Val u} = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs; vo = None\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
qed fastforce
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> {V:T=vo; Val u} E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val u) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (sync(null) e_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NullPointer)) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (sync(null) e_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NullPointer)) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. E2 = sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e &&& \<not> contains_insync e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e
\<not> contains_insync e

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

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

goal (1 subgoal):
 1. bisim (Vs @ [fresh_var Vs]) e (compE1 (Vs @ [fresh_var Vs]) e) (xs[length Vs := Addr a])
[PROOF STEP]
by(auto intro!: compE1_bisim)
[PROOF STATE]
proof (state)
this:
bisim (Vs @ [fresh_var Vs]) e (compE1 (Vs @ [fresh_var Vs]) e) (xs[length Vs := Addr a])

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

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]
using \<open>fresh_var Vs \<notin> fv e\<close> \<open>length Vs + max_vars (sync(addr a) e) \<le> length xs\<close>
[PROOF STATE]
proof (prove)
using this:
bisim (Vs @ [fresh_var Vs]) e (compE1 (Vs @ [fresh_var Vs]) e) (xs[length Vs := Addr a])
fresh_var Vs \<notin> fv e
length Vs + max_vars (sync(addr a) e) \<le> length 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 auto
[PROOF STATE]
proof (state)
this:
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (xs[length Vs := Addr a])

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

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

goal (1 subgoal):
 1. False,compP1 P,t \<turnstile>1 \<langle>sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs[length Vs := Addr a])\<rangle>
[PROOF STEP]
by -(rule Lock1Synchronized, auto)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs[length Vs := Addr a])\<rangle>

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

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs \<lbrace>(Lock, a), SyncLock a\<rbrace> (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (hp s) (xs[length Vs := Addr a])
[PROOF STEP]
using E2
[PROOF STATE]
proof (prove)
using this:
False,compP1 P,t \<turnstile>1 \<langle>sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs)\<rangle> -\<lbrace>(Lock, a), SyncLock a\<rbrace>\<rightarrow> \<langle>insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e,(hp s, xs[length Vs := Addr a])\<rangle>
E2 = sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs \<lbrace>(Lock, a), SyncLock a\<rbrace> (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (hp s) (xs[length Vs := Addr a])
[PROOF STEP]
by(fastforce simp add: sim_move01_def ta_bisim_def)
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs \<lbrace>(Lock, a), SyncLock a\<rbrace> (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (hp s) (xs[length Vs := Addr a])

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

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

goal (1 subgoal):
 1. lcl s \<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:
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (insync(a) e) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
using \<open>lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close>
[PROOF STATE]
proof (prove)
using this:
E2 = sync\<^bsub>length Vs\<^esub> (addr a) compE1 (Vs @ [fresh_var Vs]) e
\<not> contains_insync e
bisim Vs (insync(a) e) (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (xs[length Vs := Addr a])
sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs \<lbrace>(Lock, a), SyncLock a\<rbrace> (insync\<^bsub>length Vs\<^esub> (a) compE1 (Vs @ [fresh_var Vs]) e) (hp s) (xs[length Vs := Addr a])
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs[length Vs := Addr a]]
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (insync(a) e) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Lock, a), SyncLock a\<rbrace> (sync(addr a) e) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (insync(a) e) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

goal (1 subgoal):
 1. dom (lcl s') \<subseteq> dom (lcl s) \<union> fv e
[PROOF STEP]
by(auto dest: red_dom_lcl)
[PROOF STATE]
proof (state)
this:
dom (lcl s') \<subseteq> dom (lcl s) \<union> fv e

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (insync(a) e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (insync(a) e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce)
[PROOF STATE]
proof (state)
this:
\<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (insync(a) e) E2 (hp s) xs taa e2' (hp s') XS' \<and> bisim Vs (insync(a) e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

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

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

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

goal (1 subgoal):
 1. False,compP1 P,t \<turnstile>1 \<langle>insync\<^bsub>length Vs\<^esub> (a) Val v,(hp s, xs)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(hp s, xs)\<rangle>
[PROOF STEP]
by-(rule Unlock1Synchronized, auto)
[PROOF STATE]
proof (state)
this:
False,compP1 P,t \<turnstile>1 \<langle>insync\<^bsub>length Vs\<^esub> (a) Val v,(hp s, xs)\<rangle> -\<lbrace>(Unlock, a), SyncUnlock a\<rbrace>\<rightarrow> \<langle>Val v,(hp s, xs)\<rangle>

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

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) (insync\<^bsub>length Vs\<^esub> (a) Val v) (hp s) xs \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (Val v) (hp s) xs
[PROOF STEP]
by(fastforce simp add: sim_move01_def ta_bisim_def)
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) (insync\<^bsub>length Vs\<^esub> (a) Val v) (hp s) xs \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (Val v) (hp s) xs

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
using \<open>lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]\<close>
[PROOF STATE]
proof (prove)
using this:
E2 = insync\<^bsub>length Vs\<^esub> (a) Val v
xs ! length Vs = Addr a
sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) (insync\<^bsub>length Vs\<^esub> (a) Val v) (hp s) xs \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (Val v) (hp s) xs
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>(Unlock, a), SyncUnlock a\<rbrace> (insync(a) Val v) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. E2 = while (compE1 Vs b) compE1 Vs c &&& \<not> contains_insync b &&& \<not> contains_insync c
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E2 = while (compE1 Vs b) compE1 Vs c
\<not> contains_insync b
\<not> contains_insync c

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

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

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

goal (1 subgoal):
 1. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (while (b) c) (while (compE1 Vs b) compE1 Vs c) (hp s) xs \<lbrace>\<rbrace> (if (compE1 Vs b) (compE1 Vs c;; while (compE1 Vs b) compE1 Vs c) else unit) (hp s) xs
[PROOF STEP]
by(auto simp add: sim_move01_def)
[PROOF STATE]
proof (state)
this:
sim_move01 (compP1 P) t \<lbrace>\<rbrace> (while (b) c) (while (compE1 Vs b) compE1 Vs c) (hp s) xs \<lbrace>\<rbrace> (if (compE1 Vs b) (compE1 Vs c;; while (compE1 Vs b) compE1 Vs c) else unit) (hp s) xs

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

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

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

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

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

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

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (try Throw a catch(C V) e2) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs {V:Class C=\<lfloor>Addr a\<rfloor>; e2} e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']
[PROOF STEP]
by(auto intro!: exI)(auto intro!: compE1_bisim)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (try Throw a catch(C V) e2) E2 (hp s) xs ta e2' (hp s) XS' \<and> bisim Vs {V:Class C=\<lfloor>Addr a\<rfloor>; e2} e2' XS' \<and> lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] XS']

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

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (try Throw a_ catch(C_ V_) e2_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw a_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
[PROOF STEP]
by(auto intro!: exI)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (try Throw a_ catch(C_ V_) e2_) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw a_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']

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

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

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

goal (1 subgoal):
 1. (\<And>E'. \<lbrakk>bisim Vs e E' xs; ES2 = E' # compEs1 Vs es; \<not> contains_insyncs es\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto simp add: compEs1_conv_map)
[PROOF STATE]
proof (state)
this:
bisim Vs e E' xs
ES2 = E' # compEs1 Vs es
\<not> contains_insyncs es

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

goal (1 subgoal):
 1. \<exists>taa es2' xs'. sim_moves01 (compP1 P) t ta (e # es) ES2 (hp s) xs taa es2' (hp s') xs' \<and> bisims Vs (e' # es) es2' xs' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
[PROOF STEP]
by(cases "is_val e'")(fastforce elim!: sim_moves01_expr split: if_split_asm)+
[PROOF STATE]
proof (state)
this:
\<exists>taa es2' xs'. sim_moves01 (compP1 P) t ta (e # es) ES2 (hp s) xs taa es2' (hp s') xs' \<and> bisims Vs (e' # es) es2' xs' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']

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

goal (68 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 68 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
extTA2J0 P,P,t \<turnstile> \<langle>es,s\<rangle> [-ta\<rightarrow>] \<langle>es',s'\<rangle>
\<lbrakk>bisims ?vs31 es ?es2.31 ?XS31; fvs es \<subseteq> set ?vs31; lcl s \<subseteq>\<^sub>m [?vs31 [\<mapsto>] ?XS31]; length ?vs31 + max_varss es \<le> length ?XS31; \<forall>aMvs. calls es = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa es2' xs'. sim_moves01 (compP1 P) t ta es ?es2.31 (hp s) ?XS31 taa es2' (hp s') xs' \<and> bisims ?vs31 es' es2' xs' \<and> lcl s' \<subseteq>\<^sub>m [?vs31 [\<mapsto>] xs']
bisims Vs (Val v # es) ES2 xs
fvs (Val v # es) \<subseteq> set Vs
lcl s \<subseteq>\<^sub>m [Vs [\<mapsto>] xs]
length Vs + max_varss (Val v # es) \<le> length xs
\<forall>aMvs. calls (Val v # es) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs

goal (1 subgoal):
 1. \<exists>taa es2' xs'. sim_moves01 (compP1 P) t ta (Val v # es) ES2 (hp s) xs taa es2' (hp s') xs' \<and> bisims Vs (Val v # es') es2' xs' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']
[PROOF STEP]
by(fastforce elim!: bisims_cases elim!: sim_moves01_expr)
[PROOF STATE]
proof (state)
this:
\<exists>taa es2' xs'. sim_moves01 (compP1 P) t ta (Val v # es) ES2 (hp s) xs taa es2' (hp s') xs' \<and> bisims Vs (Val v # es') es2' xs' \<and> lcl s' \<subseteq>\<^sub>m [Vs [\<mapsto>] xs']

goal (67 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 67 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (67 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (Cast C e) e2 XS; fv (Cast C e) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast C e) \<le> length XS; \<forall>aMvs. call (Cast C e) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (Cast C e) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (Cast C e') e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 8. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Val v) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 9. \<And>s v U T vs e2 XS. \<lbrakk>typeof\<^bsub>hp s\<^esub> v = \<lfloor>U\<rfloor>; \<not> P \<turnstile> U \<le> T; bisim vs (Cast T (Val v)) e2 XS; fv (Cast T (Val v)) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (Cast T (Val v)) \<le> length XS; \<forall>aMvs. call (Cast T (Val v)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Cast T (Val v)) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt ClassCast)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 10. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (e instanceof T) e2 XS; fv (e instanceof T) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (e instanceof T) \<le> length XS; \<forall>aMvs. call (e instanceof T) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (e instanceof T) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (e' instanceof T) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
A total of 67 subgoals...
[PROOF STEP]
case CallThrowParams
[PROOF STATE]
proof (state)
this:
es_ = map Val vs_ @ Throw a_ # es'_
bisim vs (Val v_\<bullet>M_(es_)) e2 XS
fv (Val v_\<bullet>M_(es_)) \<subseteq> set vs
lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS]
length vs + max_vars (Val v_\<bullet>M_(es_)) \<le> length XS
\<forall>aMvs. call (Val v_\<bullet>M_(es_)) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s_) aMvs

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

goal (1 subgoal):
 1. \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Val v_\<bullet>M_(es_)) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw a_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
[PROOF STEP]
by(fastforce elim!:bisim_cases simp add: bisims_map_Val_Throw)
[PROOF STATE]
proof (state)
this:
\<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (Val v_\<bullet>M_(es_)) e2 (hp s_) XS ta e2' (hp s_) XS' \<and> bisim vs (Throw a_) e2' XS' \<and> lcl s_ \<subseteq>\<^sub>m [vs [\<mapsto>] XS']

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

goal (66 subgoals):
 1. \<And>h' a h C l vs e2 XS. \<lbrakk>(h', a) \<in> allocate h (Class_type C); bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Class_type C)\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 2. \<And>h C l vs e2 XS. \<lbrakk>allocate h (Class_type C) = {}; bisim vs (new C) e2 XS; fv (new C) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (new C) \<le> length XS; \<forall>aMvs. call (new C) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (new C) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 3. \<And>e s ta e' s' T vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta e e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs e' e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']; bisim vs (newA T\<lfloor>e\<rceil>) e2 XS; fv (newA T\<lfloor>e\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>e\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>e\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move01 (compP1 P) t ta (newA T\<lfloor>e\<rceil>) e2 (hp s) XS taa e2' (hp s') XS' \<and> bisim vs (newA T\<lfloor>e'\<rceil>) e2' XS' \<and> lcl s' \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 4. \<And>i h' a h T l vs e2 XS. \<lbrakk>0 \<le>s i; (h', a) \<in> allocate h (Array_type T (nat (sint i))); bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>NewHeapElem a (Array_type T (nat (sint i)))\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h', l)) XS' \<and> bisim vs (addr a) e2' XS' \<and> lcl (h', l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 5. \<And>i T s vs e2 XS. \<lbrakk>i <s 0; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp s) XS ta e2' (hp s) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt NegativeArraySize)) e2' XS' \<and> lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 6. \<And>i h T l vs e2 XS. \<lbrakk>0 \<le>s i; allocate h (Array_type T (nat (sint i))) = {}; bisim vs (newA T\<lfloor>Val (Intg i)\<rceil>) e2 XS; fv (newA T\<lfloor>Val (Intg i)\<rceil>) \<subseteq> set vs; lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars (newA T\<lfloor>Val (Intg i)\<rceil>) \<le> length XS; \<forall>aMvs. call (newA T\<lfloor>Val (Intg i)\<rceil>) = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp (h, l)) aMvs\<rbrakk> \<Longrightarrow> \<exists>ta e2' XS'. sim_move01 (compP1 P) t \<lbrace>\<rbrace> (newA T\<lfloor>Val (Intg i)\<rceil>) e2 (hp (h, l)) XS ta e2' (hp (h, l)) XS' \<and> bisim vs (Throw (addr_of_sys_xcpt OutOfMemory)) e2' XS' \<and> lcl (h, l) \<subseteq>\<^sub>m [vs [\<mapsto>] XS']
 7. \<And>e s ta e' s' C vs e2 XS. \<lbrakk>extTA2J0 P,P,t \<turnstile> \<langle>e,s\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>; \<And>vs e2 XS. \<lbrakk>bisim vs e e2 XS; fv e \<subseteq> set vs; lcl s \<subseteq>\<^sub>m [vs [\<mapsto>] XS]; length vs + max_vars e \<le> length XS; \<forall>aMvs. call e = \<lfloor>aMvs\<rfloor> \<longrightarrow> synthesized_call P (hp s) aMvs\<rbrakk> \<Longrightarrow> \<exists>taa e2' XS'. sim_move
[cell cut: 2157016 characters, first 2000000 kept]